我可以统一初始化模板类的静态const成员吗?

时间:2014-02-11 16:41:22

标签: c++ templates

我有一个模板类,看起来像这样:

template <typename T>
class foo
{
    static const T arr[16];
};

我计划使用的所有类型foo<T>::arr的{​​{1}}内容在数字上相同。例如,我会通过在源文件中放置行来为TT = float初始化它,如下所示:

T = double

有没有办法可以在一个地方初始化它而不必重复自己并枚举float foo<float>::arr[16] = {1, 2, 3, 4, ...}; double foo<double>::arr[16] = {1, 2, 3, 4, ...}; 可以承担的所有类型?请注意,由于每个数组元素的类型都是T,因此我不能使用从包含静态数组的非模板基类派生T的技巧。

1 个答案:

答案 0 :(得分:2)

你有什么尝试?这对我有用:

#include <iostream>
using namespace std;

template<typename T>
struct Foo {
    static T const arr[16];
};

template<typename T>
T const Foo<T>::arr[16] = {1,2,3,4};

int main() {
    for ( float const *f = Foo<float>::arr; f != Foo<float>::arr+16; ++f ) {
        cout << *f << " ";
    }
    cout << endl;
    for ( double const *d = Foo<double>::arr; d != Foo<double>::arr+16; ++d ) {
        cout << *d << " ";
    }
    cout << endl;
}