2017-01-04 3 views
0

У меня есть класс шаблона S<T> с вложенным шаблоном класса S<T>::Q<M>. Внутренний класс содержит статический экземпляр самого себя.Как определить статический член вложенного шаблона (класс шаблона внутри класса шаблона)

Как кодировать определение S<T>::Q<M>::q_ в следующем примере кода? (Линия, отмеченные <---- error)

#include <iostream> 

struct A {}; 
struct B {}; 

template<typename T> 
struct S { 

    template<typename M> 
    struct Q { 
    int x; 
    Q() : x(1) {} 

    static Q q_; 
    }; 
}; 

template<typename T, typename M> 
typename S<T>::template Q<M> S<T>::Q<M>::q_; // <---- error 

int main() 
{ 
    std::cout << S<A>::Q<B>::q_.x; 
} 

ответ

3

Вы должны определить его следующим образом:

template<typename T> 
template<typename M> 
S<T>::Q<M> S<T>::Q<M>::q_ = Q(); 
Смежные вопросы