gpt4 book ai didi

C++ 模板 : Pass Type, 不是实例?

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:00 26 4
gpt4 key购买 nike

模板可能不是这里的答案,但我尝试了一些继承但没有用,所以这就是我所在的位置。

问题:

我有一个抽象基类,其中包含我所有的“工作”功能。然后我将有一堆其他类来扩展该基类,基本上只是填充数据的详细信息以传递到“工作”函数以及覆盖几个基类函数。

将在每个派生类中更改的主要数据之一是结构。

所以我最初的攻击计划是定义一个 BaseStruct 并且抽象基类只是在该基结构上完成所有工作。如果派生类使用扩展该基结构的不同结构,那没问题。

我遇到的问题是我无法获取结构的大小,因为在工作函数中,它所操作的结构类型是 BaseStruct 而不是派生类型。

所以现在我正在研究模板。

本质上,我想要一个执行此操作的 Base 函数:

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

StructType* array = new StructType[numVertices];

size_t si = sizeof(StructType) * numVertices;

...
}

当然,如果没有实际向这个函数传递任何东西,它实际上是行不通的。我宁愿不创建 StructType 的实例来传递只是为了获取类型信息,但似乎没有任何其他方式?

本质上,我希望派生类可以指定调用此函数时要使用的 StructType。

谢谢!

最佳答案

这个调用应该有效:

对于类(静态)函数:

AbstractMaterial::CreateVertexBuffer<MySpecificStruct>();

对于成员函数:

instance.CreateVertexBuffer<MySpecificStruct>();

关于C++ 模板 : Pass Type, 不是实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8336213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com