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