以某种形式建造:
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的成员;有没有办法绕过这个限制?
答案 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;
它会工作;