0
この演算子を持つクラスが互いにネストしたときに演算子 - >()が複数回展開できますか? 次のサンプルでは、式c-> foo()がc.operator - >() - > foo()に展開され、展開の2回目の反復が発生すると予想されますが、きちんとした構文でネストされているときに演算子をオーバーロードする方法はありますか?C++でネストされたオーバーロードされた演算子 - >()
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
この質問を理論的に考えてください!
'c.operator - >()'はポインタを返します。 ' - >'の連鎖的なアプリケーションは、必然的に組み込みの逆参照演算子です。それがオーバーロードされた演算子であるためには、 'c.operator - >()'はあるクラスのインスタンスまたはその参照を返しますが、ポインタは返しません。 –
それはまさに私が行方不明だったものです! – user3348108
クラスCがstd :: unique_ptrであると考えると、戻り値だけ異なる演算子にはオーバーロードできません – user3348108