Явная специализация в классе

Рейтинг: 0Ответов: 2Опубликовано: 07.09.2014

Как сделать, чтобы этот код, работающий в MSVS, заработал на g++?

template <class A, const int options=1>
class B{        
    A a;
     
    B(){
            Init<options>();
    }
     
    template <int option> void Init();
    template<> void Init<0>(){}
    template<> void Init<1>(){ a.key=1; }        
};

Ответы

▲ 1

В этом куске кода:

B(){
            Init<options>();
    }

Опция не увидится! Пояснение читайте Explicit specialization in non-namespace scope и еще explicit (full) template specialization

▲ 0

Попробуйте так:

template <class A>
class Base
{
protected:
    A a;
};

template <class A, const int options=1>
class B : Base<A>
{
    using Base<A>::a;
};

template<class A>
class B<A, 1> : public Base<A>
{
    using Base<A>::a;
    B() { Init(); }
    void Init()
    {
        a.key = 1;
    }
};

Проверка.