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

时间:2012-08-25 14:09:02

标签: c++ templates explicit-instantiation

  

可能重复:
  Dynamic dispatching of template functions?

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

template <int cell_size>
class myCell {...}

有一定数量的单元格大小(大约10),因此我可以很容易地明确地实例化所有单元格。但是,需要哪个单元格在编译时是未知的,而是仅在运行时期间。

我知道模板是一个编译时的概念,但有没有办法以这种方式使用模板化的类,特别是因为我可以保证所有必要的单元格类型都是显式实例化的?

1 个答案:

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

这是有效的,因为你告诉编译器它可以期望哪些特化。但我认为,对于您试图解决的潜在问题,存在更好的设计。