【发布时间】:2020-04-04 07:07:19
【问题描述】:
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 又是doSomething,但我得到了
main.cpp:40:4: error: ‘class A’ has no member named ‘doSomething’
y->doSomething();
^~~~~~~~~~~
但实际上->返回一个指向B的指针,而不是A
【问题讨论】:
-
1) 你的操作符永远不会被调用。你的意思是写
(*y)->doSomething();2) 为什么首先使用new,而不是A<B> y (x);?
标签: c++ pointers templates compiler-errors operator-overloading