2017-01-02 44 views
0

當具有此操作符重載的類互相嵌套時,operator - >()是否可以多次展開? 在進一步的示例中,表達式c-> foo()擴展爲c.operator - >() - > foo(),我期望第二次擴展發生,但它不會發生。有沒有什麼辦法讓操作符在使用整齊的語法嵌套時使用它?在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 

請考慮這個問題的理論!

+0

'c.operator - >()'返回一個指針。 ' - >'的鏈接應用程序必然是一個內置的解引用操作符。因爲它是一個重載操作符,'c.operator - >()'應該返回某個類的實例或引用,但不是指針。 –

+0

對,那正是我錯過的! – user3348108

+0

考慮到C類是std :: unique_ptr,我不能重載只有返回值不同的運算符。 – user3348108

回答

0

僅當結果是另一個類類型時纔會發生鏈接。你需要做C版本是這樣的:

B& operator->() const 
{ 
    return *_b; 
} 

顯然提防_b是在真正的代碼空指針的可能性。