如何让编译器知道模板化的struct?

时间:2016-10-21 17:39:35

标签: c++ templates template-meta-programming

我正在尝试实施answer given on my question over at CodeReview.SE。基本上,我想访问模板化结构中的一些静态变量。请考虑以下示例代码:

#include <iostream>
using namespace std;

template<const int idx>
struct Data{
    static int bar;
};

template<const int idx>
int getBar(){
    return Data<idx>::bar;
}

int main() {
    const int n = 2; // Arbitrary number
    cout << getBar<n>();
    return 0;
}

编译器无法识别我希望Data<n>在程序中可用 - 但是,它可以正确识别初始getBar<n>函数,如错误消息所示:

undefined reference to `Data<2>::bar'

如何告诉编译器使模板化结构可用?

1 个答案:

答案 0 :(得分:1)

必须为静态类变量提供内存分配。加上这个:

template<const int idx>
int Data<idx>::bar = 0;

Demo

编辑:由NathanOliver联系的骗局击中头部,但对于非模板化的课程。这个答案显示了模板化时的语法。微小的差异,但仍然有用。