当运算符重载的类相互嵌套时,operator->()可以多次展开吗? 在进一步的样本中,表达式c-> foo()扩展为c.operator->() - > foo(),我希望第二次迭代迭代发生,但它不会发生。有没有办法在使用简洁的语法嵌套时重载操作符来使用它?
class A
{
public:
void foo() {}
}
class B
{
private:
A* _a;
public:
A* operator->() const
{
return _a;
}
};
class C
{
private:
B* _b;
public:
B* operator->() const
{
return _b;
}
};
C c;
c->foo(); // Desired syntax, but error: 'foo' is not a member of 'B'
c.operator->()->operator->()->foo(); // Ok, but makes no sense
请理解这个问题!
答案 0 :(得分:0)
仅当结果是另一个类类型时才会发生链接。你需要使C版本像:
B& operator->() const
{
return *_b;
}
显然要注意_b
在实际代码中是空指针的可能性。