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

相關問題