我想创建一个以模板矢量对象作为参数的函数,该函数由两个模板参数定义:类型和维度。
例如,Vec< float,3>是3D浮点矢量,Vec< int,2>是一个2D int矢量等
我想创建一个可以采用任意维度的浮点型Vec的函数。
我从这个函数签名开始编写:
template<int D> void myFunc(Vec<float, D> v);
我想这样称呼它,它不会编译:
// for 2D
myFunc<2>(Vec<float, 2>(x, y));
// for 3D
myFunc<3>(Vec<float, 3>(x, y, z));
等等。
这可以用C ++吗?我认为重载功能是可能的,但我想知道这是否可行/实用。
其他细节:在我的实际实现中,此函数是不模板类的类的一部分。我不需要解决我传入的维度,因为类已经知道内部参数的预期维度。
以下是产生的错误:
Undefined symbols for architecture x86_64:
"int MyClass::myFunc<2>(Vec<float, 2>)", referenced from:
_main in test-1e56b5.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [all] Error 1
感谢。
答案 0 :(得分:0)
如评论中所述,Why can templates only be implemented in the header file?回答了问题(我在.cpp文件而不是标题中实现它)。通过标头移动实现修复了编译器错误。