2012-11-12 120 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:我沒有想到虛擬析構函數,但我不確定什麼表示這些實例應該是不可複製的。 –

相關問題