我可以这样混合继承和模板吗? :
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;
关于C++ 模板和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3787350/