1

我的代码的一个非常简化的版本如下:

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 的辅助类或基类,显然我不想让成员一个个地赋值。基类或嵌套类是唯一可能的解决方案吗?我希望有一个使代码可读的解决方案。

4

3 回答 3

1

您可以将其中一个转发给另一个:

A& operator=( const A& ) = default;
A& operator=( A&& a )
{
    std::cout << "=1" << std::endl;
    *this = a;
    std::cout << "=2" << std::endl;
    return a;
}

您不能使用相同的签名作为您自己的实现和第二个默认生成的相同方法的实现不能共存。

活生生的例子

于 2013-10-25T07:11:11.247 回答
0

您还可以将数据成员存储在 中std::tuple,并使用元组的operator=. 不过,我不确定我是否会将其称为基类的卓越解决方案。

于 2013-10-25T05:01:36.800 回答
-1

Do you mean *this ::operator=(rhs);?

于 2013-10-25T05:52:58.847 回答