代码之家  ›  专栏  ›  技术社区  ›  PierreBdR

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

  •  4
  • PierreBdR  · 技术社区  · 16 年前

    我对初始化类模板中的静态成员所需的语法有问题。这是代码(我尽量减少它):

    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 回复  |  直到 16 年前
        1
  •  6
  •   Johannes Schaub - litb    16 年前

    更改的定义 b 致:

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

    注意typedef和 B<T1> 不必指定相同的类型:而typedef依赖于 T 被传授给 B , T> 依赖模板参数 T1 被通过。所以你不能使用 typedef 此处指定的定义 在里面 T> .