一个技巧是利用 traits
template
struct Copy {
static void do_copy(T& l,T& r) {
l = r;
}
};
template
struct Copy{
static void do_copy(T& l,T& r) {
strcpy(l,r);
}
};
template
void Swap(T &a,T &b)
{
T t;
Copy::do_copy(t,a);
Copy::do_copy(a,b);
Copy::do_copy(b,t);
}
好处是如果别的类也有特别的赋值方式,只需要特化 Copy 模板即可,并不需要关心 Swap 的实现(这里的实现很简单,但是可能别的时候一些函数模板的逻辑极其复杂而不容易看懂,类的作者并不能轻松确定如何改变类的实现才能使用这个函数模板)
当然这里可能是杀鸡用牛刀了……
可以模板特例化