2017-01-04 108 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();