1

これが私の問題です:

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

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

4

2 に答える 2

6

完全に特殊化されたテンプレートは実際にはもはやテンプレートではないため、定義は次のようになります。

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;
于 2012-05-03T18:32:16.993 に答える