[英]Private inheritance and ADL swap
我有一個Base
類型,它是由Derived
私下繼承的。 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));
}
};
這是否正常工作?
這是否正常工作?
通過調用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));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.