是否可以将模板参数传递给其他定义的函数? 例如,我有班级
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 }}
有没有办法让这项工作?
答案 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文件中,而不是标题中。必须在编译时知道模板参数。如果你有单独的编译单元,则它们不是。