2010-02-20 94 views
4

我在初始化类模板中的静态成员所需的语法方面存在问题。这里是(我试图削减它,就像我可以)代码:初始化模板内部类的静态成员

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比这更复杂。

回答

6

变化b的定义如下:

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

注意,类型定义和B<T1>不一定类型相同:虽然typedef的依赖T传递到BB<T1>依赖模板参数T1通过。因此,您不能在此处使用typedef来指定b的定义B<T1>

+0

Gr,我几乎打败你:(有一天。 – GManNickG 2010-02-20 18:04:17

相关问题