【发布时间】:2015-05-21 15:44:12
【问题描述】:
我有一个带有静态成员数组的模板类和一个需要数组大小的方法。
template <int i>
struct Foo {
static int data[];
static int size() {
return sizeof(data) / sizeof(data[0]);
}
};
我想为每个模板特化不同地初始化数组。
template <>
int Foo<0>::data[] = { 0, 1, 2 };
只要我只在一个 cpp 文件中使用它,它就可以工作。但是如何在多个文件中使用呢?
如果我把初始化放到头部,链接会失败,因为:
multiple definition of `Foo<0>::data'
如果我将它放入其中一个 cpp 文件中,其他文件将无法编译,因为:
invalid application of ‘sizeof’ to incomplete type ‘int []’
我对不将数组更改为 std::vector 的解决方案感兴趣。
【问题讨论】:
-
为什么不直接在
data所在的翻译单元中定义size()? -
我将在不同的文件中有几个专业化,但我不会在每个文件中都定义大小。
-
可能是头文件中的通用文件和实现文件中的特化?
标签: c++ arrays templates initialization