我正在实现一个类,其接口与 std::array
相似,该类具有成员函数 swap()
和非成员函数 swap()
。
由于我希望我的类模仿标准容器,因此我想要实现这两种类型的 swap()
(通过 ADL 实现非成员函数 swap()
,因为不允许特化 std::swap()
):
class A {
public:
friend void swap(A& a, A& b) { /* swap the stuff */ }
void swap(A& other) { swap(*this, other); }
};
然而,似乎我无法从类内部调用非成员的
swap()
,因为它更倾向于成员的swap()
,即使它只有一个参数。将其更改为::swap(*this, other)
也不起作用,因为在类内友元函数只能通过ADL找到。我该如何从类内调用非成员swap()
呢?
swap
来实现非成员函数swap
? - Evgswap
对称性看起来更好。 - Bernardvoid swap(A& a, A& b)
中添加交换的实现呢?它应该属于一个成员函数,比如void swap(A& other)
,然后void swap(A& a, A& b)
可以调用这个成员函数。 - t.niesestd::vector
和std::array
以及可能大多数其他容器都是这样实现的。而且,你会发现用这种方式实现很困难,而另一种方式却很容易。我没有具体的参考资料,但这已经成为了共识。 - Phil1970