gpt4 book ai didi

c++ - 私有(private)继承和 ADL 交换

转载 作者:行者123 更新时间:2023-11-30 05:18:27 25 4
gpt4 key购买 nike

我有一个 Base 类型,它由 Derived 私有(private)继承。 Derived 不添加任何新的成员变量。

现在为 Derived 编写交换的正确方法是什么?我们不能假设 Base 有一个成员 swap,所以我认为也许:

class Derived : private Base {
public:
void swap(Derived& other) noexcept
{
using std::swap;
swap(static_cast<Base&>(*this), static_cast<Base&>(other));
}
};

这个工作正常吗?

最佳答案

Does this work correctly?

随电话d1.swap(d2) , 是的。

但是如果用户尝试写:

using std::swap;
swap(d1, d2);

那不会调用 swap(Base&, Base&) ,如果那是存在的东西并且做了一些特别的事情。它将调用 std::swap<Derived>并使用移动构造函数/赋值。

因此,在 Derived 的声明中另外写:

friend void swap(Derived& d1, Derived& d2) {
d1.swap(d2);
}

或者只写那个:

friend void swap(Derived& d1, Derived& d2) {
using std::swap;
swap(static_cast<Base&>(d1), static_cast<Base&>(d2));
}

关于c++ - 私有(private)继承和 ADL 交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41751497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com