2012-05-03 10 views
0

は私の問題です:入れ子になったテンプレートの特殊化中に入れ子になったテンプレートクラスの静的メンバーを初期化していますか?ここ

template<typename T> 
class Outer 
{ 
public: 
    template<typename U> 
    class Inner 
    { 
    private: 
     static int count; 
    }; 

    static int code; 
    void print() const 
    { 
     std::cout << "generic"; 
    } 
}; 

template<> 
template<> 
class Outer<bool>::Inner<bool> 
{ 
    static int count; 
}; 

template<> 
template<> 
int Outer<bool>::Inner<bool>::count = 4; // ERROR 

私はそれを正しく初期化するにはどうすればよいですか?

答えて

5

完全特化したテンプレートは、ので、あなたの定義は単純である必要があり、実際にはもはやテンプレートです:フルで

int Outer<bool>::Inner<bool>::count = 4; 

、代わりにすべての定義で、あなたのコードは次のようになります。

template<typename T> 
class Outer 
{ 
public: 
    template<typename U> 
    class Inner 
    { 
    private: 
     static int count; 
    }; 

    static int code; 
    void print() const 
    { 
     std::cout << "generic"; 
    } 
}; 

template<typename T> 
int Outer<T>::code = 0; 

template<typename T> 
template<typename U> 
int Outer<T>::Inner<U>::count = 0; 

template<> 
template<> 
class Outer<bool>::Inner<bool> 
{ 
    static int count; 
}; 

int Outer<bool>::Inner<bool>::count = 4; 
+0

こんにちはildjarn、ビジュアルスタジオにコードを貼り付け、エラーが発生しています:**エラーC2906: 'int外部 ::インナー ::カウント':明示的な特殊化には 'テンプレート<>'が必要です**あなたはexplplainできますか? – codekiddy

+0

@codekiddy:VC++ 2010 SP1でこの正確なコード(プラス '#include ')をエラーなしでテストしました。また、[GCC 4.3.4](http://ideone.com/gvICi)と[GCC 4.5.1](http://ideone.com/fdyQW)でも動作します。 VC++のどのバージョンを使用していますか? (そして、エラーメッセージは間違いなく、あなたが 'Outer :: Inner :: count 'ではなく' Outer :: Inner :: count'について不平を言っているので、私のコードを何とか変更したことを意味します) – ildjarn

+0

Visual Studio 11 Betaプラットフォームtoolseet V110 :) – codekiddy

関連する問題