C ++模板值参数

时间:2015-04-03 20:52:58

标签: c++ templates

我想创建一个以模板矢量对象作为参数的函数,该函数由两个模板参数定义:类型和维度。

例如,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

感谢。

1 个答案:

答案 0 :(得分:0)

如评论中所述,Why can templates only be implemented in the header file?回答了问题(我在.cpp文件而不是标题中实现它)。通过标头移动实现修复了编译器错误。