是否可以访问模板外的类模板参数的功能?我尝试了以下但没有成功:
class A {
public:
void func () { std::cout << ("A called"); }
};
template<class T>
class tClass {
public:
T* operator->() {
return mem;
}
T* operator*() {
return mem;
}
const T* operator->() const {
return mem;
}
const T* operator*() const {
return mem;
}
private:
T* mem;
};
并在主要:
tClass<A>* t = new tClass<A>();
t->func();
我收到以下编译错误:error: 'class tClass<A>' has no member named 'func'
不覆盖->
运算符会返回指向模板参数的指针吗?我问,因为我看到一个非常相似的代码正在运行。我还看到了其他建议使用typedef
的答案,但我不确定它在这里是如何应用的。
忽略mem
对象现在未初始化的事实。
提前致谢!
答案 0 :(得分:5)
此:
tClass<A>* t = new tClass<A>();
t->func();
没有调用tClass<A>::operator->
,它正在取消引用tClass<A>*
本身。并且tClass<A>
没有func()
成员函数,因此出错。您必须要么双重取消引用:
(*t)->func();
或者使用指向tClass<A>
的非指针:
tClass<A> t;
t->func();
旁注,这句话:
返回指向模板参数的指针
不对。模板参数是类型。在这种情况下,A
。您将返回指向具有该类型的东西的指针 - 而不是类型本身。
答案 1 :(得分:0)
您还需要初始化指针T * mem!,例如
template<class T>
class tClass {
public:
explicit tClass(T *p):mem(p){}
T* operator->() {
return mem;
}
T* operator*() {
return mem;
}
const T* operator->() const {
return mem;
}
const T* operator*() const {
return mem;
}
private:
T* mem;
};
然后
tClass<A> t(new A() );
然后继续。