2010-02-20 2 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 

Любые идеи, как инициализировать б?

Обратите внимание, что я хотел бы сохранить typedef, как в моем реальном коде, B является более сложным, чем это.

ответ

6

Изменить определение b к следующему:

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

Обратите внимание, что ЬурейеЕ и B<T1> не обязательно указывать тот же тип: В то время как ЬурейеЕ полагается на T передается в B, B<T1> полагается на параметр шаблона T1 передается. Поэтому вы не можете использовать typedef здесь, чтобы указать определение для b в B<T1>.

+0

Gr, я почти избил вас :(Когда-нибудь. – GManNickG