0

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

屏障.pp

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

其他.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>BarrierBest_checkBarrier<0,0>

有没有办法使这项工作?

4

2 回答 2

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>(...);

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

于 2013-08-22T15:08:45.927 回答
0

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

于 2013-08-22T15:07:53.377 回答