我正在尝试编写一个基于接口的模板实现定义其模板的模板类。为了阐明我的问题,这里有一个例子。
template<typename T>
class A{
virtual T getValue() = 0;
}
class B : public A<int>{
//does some things and implements getValue
}
//template definition
//T should become int by passing class B
class C{
A* aPointer;
T previousValue;
}
我已经尝试过模板模板(不是输入错误)语法,在这篇文章中解释得非常好。模板模板参数在C ++中有哪些用途?。但是因为A的类型阻碍了B的定义,所以它不起作用。
我应该如何去创建一个确定T的模板。
您不能直接从B确定T的类型,但是可以从其接口确定T的类型。处理此问题的最佳方法是将A的typedef添加到A。
template<typename T>
class A{
virtual T getValue() = 0;
public:
typedef T ValueType;
}
class B : public A<int>{
//does some things and implements getValue
}
template<class T>
class C {
A<typename T::ValueType>* aPointer;
typename T::ValueType previousValue;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句