我能用这种方式混合使用继承和模板吗?:
template <class T>
class AbstractType { // abstract
//....
}
template <class T>
class Type1 : public AbstractType<T> {
//....
}
以后,我可以像这样使用这些类吗:
AbstractType<SomeClass>* var1 = new Type1<SomeClass>();
谢谢你的帮助。
我能用这种方式混合使用继承和模板吗?:
template <class T>
class AbstractType { // abstract
//....
}
template <class T>
class Type1 : public AbstractType<T> {
//....
}
AbstractType<SomeClass>* var1 = new Type1<SomeClass>();
谢谢你的帮助。
虽然可以这样做,但它并不像你想的那么有用。你可以像下面这样定义结构:
#include <string>
#include <vector>
using namespace std;
template<typename Val>
class Base
{
public:
virtual Val DoIt() const = 0;
};
template<typename Val>
class Derived : public Base<Val>
{
public:
Derived(const Val& val) : val_(val) {};
Val DoIt() const { return val_; }
protected:
Val val_;
};
int main()
{
Derived<string> sd("my string");
string sd_val = sd.DoIt();
Derived<float> fd(42.0f);
float fd_val = fd.DoIt();
}
Base<int>
与Base<string>
完全不同,你不能只获取一个指向任何一个的Base*
。vector<Base*> my_objs;
是的,你可以。你可以使用模板参数来做任何你想要的事情,并将其传递到包含的基本模板类中。
您可以使用类模板中的任何类型,只要该类型与类定义兼容。
例如:
template<class T> struct S{
T mt;
};
这样的结构体可以实例化为T = int,T = double,但不能为T = void。