[英]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.