可能重复:
如何为我的班级提供交换功能?
每次我认为我理解它时,我都会看到一些让我非常困惑的东西。
如果你想swap
为你自己的类提供一个实现,你会怎么做?
可能性列表是:
在命名空间内定义一个
std
(带两个参数),它调用下面的#3
(有人说这是正确的;有人说是非法的)在类中定义一个静态方法,使用两个参数进行交换(对我来说比 #4 更有意义,但我不明白为什么没有人这样做),它根据需要
调用任何基类swap
在类中定义一个实例方法,将另一个参数与 交换
swap
,它根据需要调用任何基类在类中定义一个实例方法,将另外两个参数传递给 swap,同样在这里
swap
,它根据需要调用任何基类在你自己的命名空间中定义一个(带两个参数),它调用#3
别的东西
我自己的理解是我需要#5和#3,然后调用者会swap
像这样调用using std::swap; swap(a, b);
,但似乎没有人建议这种组合真的让我感到困惑。而且我真的完全不明白#4,因为实际上每个人都在使用实例成员,而实际上操作是静态的。我不知道我的理解是错误的还是我在查找时看到的一堆答案。
正确的方法是什么?