显式实例化模板的动态使用

Dynamical use of explicitly instantiated templates

本文关键字:动态 实例化      更新时间:2023-10-16

可能重复:
模板函数的动态调度?

我想使用非类型模板来创建具有不同内存占用的网格单元,而不必使用堆上动态分配的内存,例如

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
      }
   }
}

这之所以有效,是因为你告诉编译器它可以期待哪些专业化。但我认为,对于你试图解决的潜在问题,有一个更好的设计。