2011-12-01 61 views
0

模板可能不是這裏的答案,但我嘗試了一些繼承,並沒有工作,所以這裏是我在哪裏。C++模板:通過類型,而不是實例?

問題:

我有房子我所有的「工作」功能的抽象基類。然後我會有一大堆擴展該基類的其他類,基本上只是填充數據的細節以傳遞到「工作」函數以及重寫一些基類函數。

將在每個派生類中更改的主要數據塊之一是一個結構。

所以我最初的攻擊計劃是定義一個BaseStruct,抽象基類只是完成了它在基礎結構上的所有工作。如果派生類使用擴展該基本結構的不同結構,那就沒問題。

我遇到的問題是,我無法獲得結構的大小,因爲在工作函數中,它運行的結構類型是BaseStruct而不是派生類型。

所以現在我正在看模板。

基本上我想有一個基本的功能,這是否:

template<typename StructType> 
void AbstractMaterial::CreateVertexBuffer() { 

    StructType* array = new StructType[numVertices]; 

    size_t si = sizeof(StructType) * numVertices; 

    ... 
} 

當然實際上不傳遞任何進入該功能,它並沒有真正發揮作用。我寧願不創建一個StructType的實例來傳入,只是爲了獲取類型信息,但它似乎沒有任何其他方式?

本質上我想派生類給某人指定一個StructType來調用此函數時使用。

謝謝!

回答

3

此調用應該工作:

對於類(靜態)功能:

AbstractMaterial::CreateVertexBuffer<MySpecificStruct>(); 

成員函數:

instance.CreateVertexBuffer<MySpecificStruct>(); 
+0

感謝您的迴應! – Jon

3

您可以指定類型由之前<>之間在寫它括號。例如:

// supposing asm is an AbstractMaterial* 
asm->CreateVertexBuffer<SomeType>(); 
+0

感謝您的迴應! – Jon