我的代码的一个非常简化的版本如下:
class bCls {
private:
/// Many members, not shown for simplicity.
public:
/// Custom assignment operator; I would like to use the default operator within.
bCls& operator=(bCls&& rhs) {
defaultoperator=(rhs);
someCustomOperations();
return *this;
}
};
使用默认赋值运算符代替defaultoperator =(bCls&&)是否有优雅的解决方案?我不想求助于bCls的辅助或基类,显然我不想成员指派任务。基础或嵌套类是唯一可能的解决方案吗?我希望找到一种能让代码保持可读的解决方案。
答案 0 :(得分:1)
您可以将一个转发给另一个
A& operator=( const A& ) = default;
A& operator=( A&& a )
{
std::cout << "=1" << std::endl;
*this = a;
std::cout << "=2" << std::endl;
return a;
}
您不能使用与您自己的实现相同的签名,而相同方法的第二个默认生成的实现不能共存。
答案 1 :(得分:0)
您还可以将数据成员存储在std::tuple
中,并使用元组的operator=
。不过,我不确定我会把它称为基类的优秀解决方案。
答案 2 :(得分:-1)
您的意思是*this ::operator=(rhs);
吗?