本文介绍了问题上的boost ::互换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在问题情侣的boost ::交换
。请参考code以下基本上是从升压/ swap.hpp
剪切粘贴。我指的是库版本1.43.0。
命名空间boost_swap_impl
{
模板<类T>
无效swap_impl(T&安培;离开后,T&安培;右)
{
使用命名空间std; //使用std ::互换,如果参数依赖查找失败
互换(左,右);
} 模板< T类,的std ::为size_t N'GT;
无效swap_impl(T(安培;左)[N],T(安培;右)[N])
{
对于(的std ::为size_t我= 0; I< N ++ I)
{
:: boost_swap_impl :: swap_impl(左[I],右[I]);
}
}
}名字空间boost
{
模板<组别为T1,T2类GT&;
无效掉期(T1&安培;左,T2和放大器;右)
{
:: boost_swap_impl :: swap_impl(左,右);
}
}
- 为什么声明
的boost ::交换
为模板< typename的T1,typename的T2>
在休息的时候在code的它是所有处理相同类型? - 如果我定义自己的全局函数
无效掉期(T&安培,T&放大器;)
我看到它是全局函数,它会从称为swap_impl(T&安培;离开后,T&安培;右)
。这难道不是因为swap_impl
冲突,因此错误条件也使用空间std
已掉界定?
解决方案
- 这使得它比
的std ::交换专业化程度较低
,所以你不要超载歧义错误当两个的std ::互换
和的boost ::交换
在范围(的std ::互换
将采取precedence) - 无,无模板总是有重载决议时超过模板precedence,所以一个命名空间范围的非模板
交换
将采取precedence超过两个的boost ::交换
和的std ::互换
(将在命名空间范围的模板交换
超载对于UDT&ndash的;认为部分专业化,但不是真的..)。注意,不像的std ::互换
,的boost ::交换
被明确写入利用的。
下面就是在C ++标准03对有两个点和ndash的说; [over.match.best](§13.3.3/ 1):
这篇关于问题上的boost ::互换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!