用于初始化模板类的静态数据成员的部分模板专门化

时间:2011-10-06 04:44:19

标签: c++ templates static-members template-specialization

如何针对特定参数以不同方式初始化模板类的静态数据成员?

我理解模板与其他类不同,只有项目中使用的模板才会被实例化。我是否可以为不同的参数列出许多不同的初始化,并让编译器使用哪个适当的?

例如,以下是否有效,如果不正确,这是做什么的正确方法? :

template<class T>
class someClass
{
   static T someData;
   // other data, functions, etc...
};

template<class T>
T someClass::someData = T.getValue();

template<>
int someClass<int>::someData = 5;

template<>
double someClass<double>::someData = 5.0;

// etc...

1 个答案:

答案 0 :(得分:1)

应该有效。您可能需要将这些文件放入.c文件而不是标题。

int someClass<int>::someData = 5;
double someClass<double>::someData = 5.0;

这里还有一个工作的部分模板专门化,初始化静态数据成员:

// .h
template <class T, bool O>
struct Foo {
    T *d_ptr;
    static short id;
    Foo(T *ptr) : d_ptr(ptr) { }
};
template <class T>
struct Foo<T, true> {
    T *d_ptr;
    static short id;
    Foo(T *ptr) : d_ptr(ptr) { }
};
template<class T, bool O>
short Foo<T, O>::id = 0;
template<class T>
short Foo<T, true>::id = 1;

//.cpp
int main(int argc, char *argv[])
{
    Foo<int, true> ft(0);
    Foo<int, false> ff(0);
    cout << ft.id << " " << ff.id << endl;
}