如何定义嵌套模板的静态成员(模板类中的模板类)

时间:2017-01-04 07:55:51

标签: c++ templates

我有一个带有嵌套模板类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;
}

1 个答案:

答案 0 :(得分:3)

您应该按以下方式定义它:

template<typename T>
template<typename M>
S<T>::Q<M> S<T>::Q<M>::q_ = Q();