2012-11-12 82 views
2

我有下面的类:C++店相同的类具有不同的模板阵列

template <typename T> 
class A 
{ 
public: 
    void method(const char *buffer); 
    // the template T is used inside this method for a local variable 
}; 

现在我需要这个类中包含不同的模板实例组成的数组:

std::vector<A*> array; 
array.push_back(new A<uint32_t>); 
array.push_back(new A<int32_t>); 

std::vector<A*> array;不会工作,因为我显然需要指定一个模板,但我不能这样做,因为我在这个数组中存储不同的类型。是否有某种通用类型或其他解决方案?

+5

你能只是一个成员函数模板,而不是整个类? –

+0

你可以让所有'A's继承自一个基地,虽然这往往是不好的。 – Pubby

+3

除了Martinho所说的,'A'不是一种类型,它是一个类模板。所以你不能像'std :: vector '那样将它用作模板参数。 – mfontanini

回答

6

你需要一个基类:

class ABase { 
public: 
    virtual void method(const char *) = 0; 
    virtual ~ABase() { } 
}; 

template <typename T> 
class A : public ABase 
{ 
public: 
    virtual void method(const char *); 
}; 

然后使用它像

std::vector<ABase*> array; 
array.push_back(new A<uint32_t>); 
array.push_back(new A<int32_t>); 
+0

'ABase'应该可能有私人或删除的拷贝构造函数和拷贝分配。 – aschepler

+0

@aschepler:我没有想到虚拟析构函数,但我不确定什么表示这些实例应该是不可复制的。 –

相关问题