2

可能重复:
模板函数的动态分派?

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

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

单元格大小的数量是有限的(大约 10 个),因此我可以轻松地显式地实例化所有单元格。但是,在编译时不知道需要哪一个单元,而仅在运行时才知道。

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

4

1 回答 1

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

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

于 2012-08-25T14:12:56.940 回答