繁体   English   中英

重载 -> C++ 中的运算符以返回自定义对象

[英]Overloading -> operator in C++ to return custom object

template <class T>
class A
{
public:
    A(std::shared_ptr<T> p) : p(p)
    {
    }

    T* operator->() const {
        return p.get();
    }

private:
    std::shared_ptr<T> p;
};
class B{
    public:
    void doSomething() {

    }
};


int main()
{
    auto x = std::make_shared<B>();
    auto y = new A<B>(x);
    y->doSomething();
    return 0;
}

我重载指针运算符的方式->它应该返回T* (在这种情况下B* ),这反过来又会有doSomething但我得到

main.cpp:40:4: error: ‘class A’ has no member named ‘doSomething’
 y->doSomething();
    ^~~~~~~~~~~

但实际上->返回一个指向B的指针,而不是A

请注意, y的类型是A<B>*而不是A<B> operator->可以为对象重载。 指针仅提供内置->

以下应该适用于您的情况:

(*y)->doSomething();

附带说明一下,当您已经将shared_ptr<>用于其他分配时,无缘无故地使用new是很奇怪的。 :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM