将类参数模板化为外部函数

Templated class parameters to outside function

本文关键字:外部 函数 参数      更新时间:2023-10-16

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

屏障.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>

有没有办法做到这一点?

如果组合数量有限,则可以显式实例化模板,从而使代码在头文件和源文件之间保持分离。

把这个放在你的源文件的底部

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

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

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