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