Cha*_*l72 12 c++ standards swap stl
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)
......这很好.但我不完全确定我的惯常做法是否符合标准.我这样做了吗?
小智 15
你所拥有的不是专业化,它是超载,正是标准禁止的.(但是,它几乎总是在实践中起作用,并且可能是您可以接受的.)
以下是为类模板提供自己的交换的方法:
template<class T>
struct Ex {
friend void swap(Ex& a, Ex& b) {
using std::swap;
swap(a.n, b.n);
}
T n;
}
Run Code Online (Sandbox Code Playgroud)
以下是你如何调用swap,你会注意到它也用于Ex的交换:
void f() {
using std::swap; // std::swap is the default or fallback
Ex<int> a, b;
swap(a, b); // invokes ADL
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4235 次 |
| 最近记录: |