运营商=可能不是会员吗?

时间:2010-03-31 18:35:17

标签: c++

以某种形式建造:

struct Node
{
Node():left_(nullptr), right_(nullptr)
{ }
int id_;
Node* left_;
Node* right_;
};

我想启用语法:

Node parent;
Node child;
parent.right_ = child;

所以为了做到这一点,我需要:

Node& operator=(Node* left, Node right);

但是我得到的信息是operator =必须是fnc的成员;有没有办法绕过这个限制?

4 个答案:

答案 0 :(得分:5)

为什么不使用parent.right_ = &child?如果可能的话,创建一个为指针赋值类型的重载运算符将是一个非常糟糕的主意。它会混淆真正发生的事情,并使代码更难理解读取它的人。

嗯,你已经接受了答案,但无论如何,你可以做那些写Boost.Format的人做的事情,只选择一些可以作为非成员函数重载的other operator并且具有低成本冲突的可能性(他们选择%)。在我看来,这有点不那么混淆了。

答案 1 :(得分:4)

运营商=()必须是会员。并且你不能重写指针赋值的含义。

答案 2 :(得分:2)

从值到指针的自动转换会产生许多可能性,使您的代码难以理解。

如果您仍想这样做,可以在Node类上提供转换运算符:

operator Node* () { return this; }

答案 3 :(得分:2)

替换

parent.right_ = child;

parent.right_ = &child;

它会工作;