Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 显式实例化模板的动态使用_C++_Templates_Explicit Instantiation - Fatal编程技术网

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

C++ 显式实例化模板的动态使用,c++,templates,explicit-instantiation,C++,Templates,Explicit Instantiation,可能重复: 我希望使用非类型模板创建具有不同内存占用的网格单元,而不必使用堆上的动态分配内存,例如 template <int cell_size> class myCell {...} 模板 类myCell{…} 单元大小有限(大约10个),因此我可以很容易地显式地实例化所有单元。然而,在编译时不知道需要哪一个单元格,而只在运行时知道 我知道模板是一个编译时概念,但有没有办法以这种方式使用模板类,特别是因为我可以保证所有必要的单元格类型都被显式实例化?您可以使用factory

可能重复:

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

template <int cell_size>
class myCell {...}
模板
类myCell{…}
单元大小有限(大约10个),因此我可以很容易地显式地实例化所有单元。然而,在编译时不知道需要哪一个单元格,而只在运行时知道


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

您可以使用factory模式,但您需要一个基类作为返回类型:

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
      }
   }
}
模板
类myCell:public cellBase{…}
结构单元工厂
{
静态cellBase*getCell(整数单元格大小)
{
开关(单元大小)
{
案例1:
返回新的迈塞尔;
打破
//等等
}
}
}

这之所以有效,是因为您告诉编译器它可以预期哪些专门化。但我认为,对于您试图解决的根本问题,存在更好的设计。

所谓“更好的设计”,是指工厂模式以外的东西,还是指使用模板以外的东西?@Michaelschlotke,模板以外的东西。这取决于实际问题。我考虑过使用模板,因为这将允许编译器优化内部单元格数据上的循环。就我所理解的C++而言,如果代码> CyelSythSuth[/Cuff]只是一个成员变量,并且用于在堆上分配内存,那么在单元数据上的所有循环都将按原样执行,因为编译器不能在编译时对最佳优化策略作出任何推断。