繁体   English   中英

相关模板参数

[英]Dependent template parameters

我的模板化函数有两个模板参数( int mint n )。 该函数返回一个类Foo<int r> ,我想要r=m+n

在foo.h中,我有:

template<int m> class Foo {};
template<int m, int n>
Foo<m+n> myFunc(const Foo<m> &a, const Foo<n> &b);

在foo.cpp中,我有:

Foo<m+n> myFunc(const Foo<m> &a, const Foo<n> &b)
{
    return Foo<m+n>();
}

最后在main.cpp中:

#include "foo.h"
int main()
{
    myFunc(Foo<2>(), Foo<3>());
}

如果尝试此操作,则会收到链接器错误。:

 "undefined reference to `Foo<(2)+(2)> myFunc(Foo<2> const&, Foo<2> const&)'

编辑:编辑以包括完整的代码。 可能不太清楚,但有些人喜欢。

从您提供的内容来看,该错误表明尽管您已声明该函数,但未在链接器可以看到的任何地方提供实现。

您可能将函数主体代码放在错误的位置。 对于(非专用)模板函数,通常希望将整个函数主体放在头文件中,不是在源文件中 ,否则编译器在调用该函数时无法为该函数生成代码。

这是因为您尚未定义函数,或者在实例化时该定义对于编译器不可见。 如果编写函数体,它将起作用:

template <int> class Foo {};

template<int m, int n>
Foo<m+n> myFunc(const Foo<m> &a, const Foo<n> &b) {} // NOTE: Body.

int main () {
    myFunc (Foo<1>(), Foo<2>());
}

(旁注:请下次发布完整的代码)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM