外化函数的模板类参数

时间:2013-08-22 15:04:15

标签: c++ templates

是否可以将模板参数传递给其他定义的函数? 例如,我有班级

Barrier.pp

template<Location L, Knock K>
class Barrier
{
  //...
  void checkBarrier( ... )
  {
    BarrierBest_checkBarrier<L, K>( ... );
  }
  //...
}

Other.cpp

template<Location L, Knock K>
BarrierBest_checkBarrier( ... )
{
  //Use L and K to do call other function
}

正如我现在所做的那样,编译器会为模板参数的所有可能组合抛出一个未解析的外部符号,即BarrierBest_checkBarrier<1,1>BarrierBest_checkBarrier<1,0>BarrierBest_checkBarrier<0,1>,{{1 }}

有没有办法让这项工作?

2 个答案:

答案 0 :(得分:2)

如果组合数量有限,您可以显式实例化模板,从而使您的代码可以在标题和源文件之间分开。

将它放在源文件的底部

template void BarrierBest_checkBarrier<0, 0>(...);
template void BarrierBest_checkBarrier<0, 1>(...);
template void BarrierBest_checkBarrier<1, 0>(...);
template void BarrierBest_checkBarrier<1, 1>(...);

如果您希望调用函数的其他文件选择不在此列表中的参数,则必须将整个模板化代码放入头文件中。

答案 1 :(得分:0)

问题可能是您的模板化函数位于cpp文件中,而不是标题中。必须在编译时知道模板参数。如果你有单独的编译单元,则它们不是。