在這種情況下,爲什麼我無法訪問B1
案例中不合格的基類成員x
?不loook曖昧我...從模板繼承時需要合格的訪問權限
template<class T>
struct A { T x; };
template<class T>
struct B1 : A<T> { T f() { return A<T>::x; } };
struct B2 : A<int> { int f() { return x; } };
在這種情況下,爲什麼我無法訪問B1
案例中不合格的基類成員x
?不loook曖昧我...從模板繼承時需要合格的訪問權限
template<class T>
struct A { T x; };
template<class T>
struct B1 : A<T> { T f() { return A<T>::x; } };
struct B2 : A<int> { int f() { return x; } };
因爲x
不依賴,它會在模板中定義的 上下文中擡起頭來。在這種情況下, 編譯器不知道T
,並且無法查看依賴的基類 類。例如,它如何知道A<T>
的任何內容,而不知道T
是什麼。 (可能有A
的專門化,例如完全不同的成員。)
之前使用A
實際上,我認爲這裏的問題更多的是爲什麼它不能看到'x',因爲我們知道*基類型是'A
基類依賴於'T'。編譯器在知道「T」是什麼之前不能看到它。 (如果'A
不知道在使用 – pascal 2013-04-05 11:57:12