C++ 显式实例化模板的动态使用
可能重复:C++ 显式实例化模板的动态使用,c++,templates,explicit-instantiation,C++,Templates,Explicit Instantiation,可能重复: 我希望使用非类型模板创建具有不同内存占用的网格单元,而不必使用堆上的动态分配内存,例如 template <int cell_size> class myCell {...} 模板 类myCell{…} 单元大小有限(大约10个),因此我可以很容易地显式地实例化所有单元。然而,在编译时不知道需要哪一个单元格,而只在运行时知道 我知道模板是一个编译时概念,但有没有办法以这种方式使用模板类,特别是因为我可以保证所有必要的单元格类型都被显式实例化?您可以使用factory
我希望使用非类型模板创建具有不同内存占用的网格单元,而不必使用堆上的动态分配内存,例如
template <int cell_size>
class myCell {...}
模板
类myCell{…}
单元大小有限(大约10个),因此我可以很容易地显式地实例化所有单元。然而,在编译时不知道需要哪一个单元格,而只在运行时知道
我知道模板是一个编译时概念,但有没有办法以这种方式使用模板类,特别是因为我可以保证所有必要的单元格类型都被显式实例化?您可以使用factory模式,但您需要一个基类作为返回类型:
template <int cell_size>
class myCell : public cellBase {...}
struct CellFactory
{
static cellBase* getCell(int cell_size)
{
switch (cell_size)
{
case 1:
return new myCell<1>;
break;
//and so on
}
}
}
模板
类myCell:public cellBase{…}
结构单元工厂
{
静态cellBase*getCell(整数单元格大小)
{
开关(单元大小)
{
案例1:
返回新的迈塞尔;
打破
//等等
}
}
}
这之所以有效,是因为您告诉编译器它可以预期哪些专门化。但我认为,对于您试图解决的根本问题,存在更好的设计。所谓“更好的设计”,是指工厂模式以外的东西,还是指使用模板以外的东西?@Michaelschlotke,模板以外的东西。这取决于实际问题。我考虑过使用模板,因为这将允许编译器优化内部单元格数据上的循环。就我所理解的C++而言,如果代码> CyelSythSuth[/Cuff]只是一个成员变量,并且用于在堆上分配内存,那么在单元数据上的所有循环都将按原样执行,因为编译器不能在编译时对最佳优化策略作出任何推断。