2011-12-01 60 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