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

时间:2010-02-20 17:56:48

标签: c++ templates static 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;
}

使用g++,我得到的错误是:

error: too few template-parameter-lists

任何想法如何初始化b?

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

1 个答案:

答案 0 :(得分:6)

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

template <typename T> template<typename T1>
T1 A<T>::B<T1>::b;

请注意,typedef和B<T1>不一定指定相同的类型:当typedef依赖T传递给B时,B<T1>依赖于模板参数T1正在传递。因此,您无法使用typedefb中为B<T1>指定定义。