我將我的C++ windows代碼(msvc & intel)移植到Linux(g ++)。代碼使用了很多模板(我喜歡元編程;-)。但是我不能編譯這個代碼:g ++模板問題
template <class TA>
struct A
{
template <class TAB> struct B;
};
template <class TC>
struct C {};
template <class TD>
struct D
{
template <class TTD> class T {};
};
template<class TA>
template<class TBA>
struct A<TA>::B : C<typename D<TA>::T<TBA> >
{
int foo;
};
g ++告訴我,在A :: B的定義中,C類具有無效的模板參數。但在msvc和intel上它效果很好!這裏有什麼問題? PS:抱歉,我無法發佈原始代碼,因爲它太模板複雜。但是這個例子幾乎是一樣的,並且在g ++上給出了相同的錯誤。 謝謝。
更新:我發現問題是T的TBA參數g ++ doensn't像使用第二個模板的定義。
我見過編譯「模板模板結構......」語法之前,但我從來沒有知道它的含義或爲什麼它是合法的語法。這是什麼意思(當像這樣的結構前面提到兩次「模板」)? –
Dennis
2010-06-25 19:51:18
@ Dennis:它需要在封閉模板之外定義嵌套模板,請參閱[這裏](http://www.comeaucomputing.com/techtalk/templates/#outsidedef)。 – 2010-06-25 19:53:35
TA是A的模板參數,TAB是A的模板參數:: B – f0b0s 2010-06-25 19:56:29