初始化模板内部类的静态成员

Pie*_*BdR 4 c++ static templates initialization

我在类模板中初始化静态成员所需的语法有问题.这是代码(我试图尽可能地减少它):

template <typename T>
struct A
{
  template <typename T1>
  struct B
  {
    static T1 b;
  };

  B<T> b;
  typedef B<T> BT;
  T val() { return b.b; }
};

template <typename T>
T A<T>::BT::b;

struct D
{
  D() : d(0) {}
  int d;
};

int main()
{
  A<D> a;
  return a.val().d;
}
Run Code Online (Sandbox Code Playgroud)

有了g++,我得到的错误是:

error: too few template-parameter-lists
Run Code Online (Sandbox Code Playgroud)

有任何想法如何初始化b?

请注意,我想保留typedef,就像在我的真实代码中一样,B比这更复杂.

Joh*_*itb 6

将定义更改b为以下内容:

template <typename T> template<typename T1>
T1 A<T>::B<T1>::b;
Run Code Online (Sandbox Code Playgroud)

请注意,typedef B<T1>并不一定指定相同的类型:当typedef依赖于T传递时B,B<T1>依赖于T1传递的模板参数.因此,您无法使用typedef此处为bin 指定定义B<T1>.