2013-07-25 35 views
2

我:初始化使用模板参数作为类型的模板类的静态成员?

template<typename TypeA, typename TypeB> 
class MyClass 
{ 
    public: 
    static TypeA StaticA; 
    static TypeB StaticB; 

    //...other stuff.... 
}; 

如何初始化 'StaticA'(和StaticB)?

如果我这样做:(在头文件,在类的声明下,而不是在它里面)

template<> 
typename MyClass<TypeA, TypeB>::TypeA MyClass<TypeA, TypeB>::StaticA = TypeA(); 

给我:

'TypeA' was not declared in this scope. 
'TypeB' was not declared in this scope. 
template argument 1 is invalid 
template argument 2 is invalid 

而且这样的:

template<typename TypeA, typename TypeB> 
typename MyClass<TypeA, TypeB>::TypeA MyClass<TypeA, TypeB>::StaticA = TypeA(); 

给我:

conflicting declaration 'typename MyClass<TypeA, TypeB>::TypeA MyClass<TypeA, TypeB>::StaticA' 
'MyClass<TypeA, TypeB>::StaticA' has a previous declaration as 'TypeA MyClass<TypeA, TypeB>::StaticA' 
declaration of 'TypeA MyClass<TypeA, TypeB>::StaticA' outside of class is not definition [-fpermissive] 

初始化使用模板参数作为类型的模板类的静态成员的正确方法是什么?

回答

2

啊,正确的语法是:

template<typename TypeA, typename TypeB> 
TypeA ResourceFactory<TypeA, TypeB>::StaticA = TypeA(); 

这在我原来的问题是:

template<typename TypeA, typename TypeB> 
typename MyClass<TypeA, TypeB>:: TypeA MyClass<TypeA, TypeB>::StaticA = TypeA(); 
^remove^ ^-------remove--------^ 

我是因为所有的模板参数感到困惑。 =)

与此问题的answer类似但不完全重叠。

相关问题