将类参数模板化为外部函数
Templated class parameters to outside function
是否可以将模板参数传递给其他定义的函数?例如,我有类
屏障.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文件中,而不是在头文件中。模板参数必须在编译时已知。如果您有单独的编译单元,则它们不是。
相关文章:
- 调用外部函数,无法指定类型 C++/MVS
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- add_cuda_library输出:未解析的外部函数
- 外部函数在 main() 上调用时返回分段错误 11.(C++)
- 如何在Windows Media Foundation中获取相机外部函数?
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- antlr cpp target 的标头部分不允许使用具有默认参数的外部函数
- 将多维数组传递给外部"C"函数为 void *
- llvm 调用一个以 char * 作为参数的外部函数
- 将 std::vector<bool> 传递给外部函数
- 如何在类向量中存储/使用外部函数指针
- LLVM - 如何使嵌套函数看到外部函数的变量
- CUDA9.2及以上版本中模板默认参数存在无法解决的外部函数错误
- 宏导入外部函数
- 如何在LLVM Pass中将字符串传递给外部函数
- C++:是否可以区分外部"C"函数和普通函数?
- 从外部函数访问外部结构属性
- 如何将成员声明为指向外部"C"函数的指针?
- C 将外部函数链接为成员函数
- LLVM JIT编译的程序找不到外部函数