std::swap()在排序甚至分配期间被许多std容器(例如std::list和std::vector)使用.
但是std实现swap()非常普遍,而且对于自定义类型来说效率很低.
因此,通过std::swap()使用自定义类型特定实现进行重载可以获得效率.但是如何实现它以便std容器使用它?
启用swapSTL算法的正确方法是什么?
1)会员swap.是否std::swap使用SFINAE技巧来使用该成员swap.
2)自由站立swap在同一名称空间中.
3)部分专业化std::swap.
4)以上所有.
谢谢.
编辑:看起来我没有清楚地说出我的问题.基本上,我有一个模板类,我需要STL algos来使用我为该类编写的(高效)交换方法.
C++标准禁止在命名空间中声明类型或定义任何内容std,但它允许您为用户定义的类型专门化标准STL模板.
通常,当我想专注std::swap于我自己的自定义模板类型时,我只是这样做:
namespace std
{
template <class T>
void swap(MyType<T>& t1, MyType<T>& t2)
{
t1.swap(t2);
}
}
Run Code Online (Sandbox Code Playgroud)
......这很好.但我不完全确定我的惯常做法是否符合标准.我这样做了吗?