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

标签 c++ templates explicit-instantiation

<分区>

Possible Duplicate:
Dynamic dispatching of template functions?

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

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

之所以可行,是因为您告诉编译器它可以期待哪些特化。但我认为针对您要解决的根本问题存在更好的设计。

关于c++ - 显式实例化模板的动态使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12122692/

相关文章:

c++ - GTK3:使用拖放时鼠标消失

c++ - 寻找具有特定功能的多边形几何库

C++11 范围内的随机数和明确的可能性

c++ - 有条件地删除模板类中的方法

c++ - 使用 auto->decltype 方法显式实例化函数

c++ - 大量QMenus的基于for的循环

javascript - 带有模板和缓存的客户端 JS 框架?

c++ - 转发引用、引用限定符和模板成员函数

C++如何泛化类函数参数来处理多种类型的函数指针?

c++ - 显式模板实例化问题