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]

テンプレート引数を型として使用するテンプレート化されたクラスの静的メンバーを初期化する適切な方法は何ですか?

4

1 に答える 1

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--------^

すべてのテンプレート引数のために混乱していました。=)

この質問の回答と似ていますが、完全には重複していません。

于 2013-07-25T20:32:34.730 に答える