私は持っている:
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]
テンプレート引数を型として使用するテンプレート化されたクラスの静的メンバーを初期化する適切な方法は何ですか?