在C ++中嵌套重载的operator->()

时间:2017-01-02 23:20:53

标签: c++ operator-overloading

当运算符重载的类相互嵌套时,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

请理解这个问题!

1 个答案:

答案 0 :(得分:0)

仅当结果是另一个类类型时才会发生链接。你需要使C版本像:

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

显然要注意_b在实际代码中是空指针的可能性。