我有一個關於從通過模板繼承的類中提取typedef的信息的問題。爲了說明我的問題,請考慮以下簡單示例:如何從通過模板繼承的類中提取typedef的信息?
#include <iostream>
class A1{
public:
void print(){ printf("I am A1\n"); };
};
class A2{
public:
void print(){ printf("I am A2\n"); };
};
class B1{
public:
typedef A1 A;
};
class B2{
public:
typedef A2 A;
};
template<class b>
class C{
typedef class b::A AA;
AA a;
public:
void Cprint() { a.print(); };
};
int main()
{
C<B1> c1;
c1.Cprint();
C<B2> c2;
c2.Cprint();
}
C類將類(B1或B2)作爲模板參數。 B1和B2都有一個叫做A的tyepdef(分別是A1和A2類)。在編譯時,C類應該能夠找出「B」類正在使用哪兩個「A」類。當我用g ++編譯時,上面的代碼完美地工作。但是,當我使用Intel的icpc進行編譯時,出現以下錯誤:
test.cpp(24): error: typedef "A" may not be used in an elaborated type specifier
typedef class b::A AA;
^
detected during instantiation of class "C<b> [with b=B1]" at line 33
是否有另一種方法可以實現類似的效果?當然,我的實際代碼要複雜得多,我希望以這種方式構建類。我還想用icpc而不是g ++編譯原因。
在此先感謝。 卡爾
恕我直言,最好還在模板類型參數列表中使用'typename'關鍵字,並寫入從大寫字母開始的類名稱。 – parallelgeek 2012-04-23 20:48:29