可能重复:
模板函数的动态分派?
我想使用非类型模板来创建具有不同内存占用的网格单元,而不必在堆上使用动态分配的内存,例如
template <int cell_size>
class myCell {...}
单元格大小的数量是有限的(大约 10 个),因此我可以轻松地显式地实例化所有单元格。但是,在编译时不知道需要哪一个单元,而仅在运行时才知道。
我知道模板是一个编译时概念,但是有没有办法以这种方式使用模板类,特别是因为我可以保证所有必要的单元格类型都被显式实例化?
可能重复:
模板函数的动态分派?
我想使用非类型模板来创建具有不同内存占用的网格单元,而不必在堆上使用动态分配的内存,例如
template <int cell_size>
class myCell {...}
单元格大小的数量是有限的(大约 10 个),因此我可以轻松地显式地实例化所有单元格。但是,在编译时不知道需要哪一个单元,而仅在运行时才知道。
我知道模板是一个编译时概念,但是有没有办法以这种方式使用模板类,特别是因为我可以保证所有必要的单元格类型都被显式实例化?
您可以使用工厂模式,但您需要一个基类作为返回类型:
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
}
}
}
这是有效的,因为您告诉编译器它可以期待哪些专业化。但我认为对于您要解决的潜在问题存在更好的设计。