考慮下面的例子:爲什麼對模板化基類的函數調用不起作用?
template <typename T>
class A {
public:
void f() {
cout << "A::f()\n";
}
};
template<>
class A<int> {
};
template<typename T>
class B: public A<T> {
public:
void g() {
cout << "B::g()\n";
A<T>::f();
}
};
int main() {
B<int> b; // (1)
b.g(); // (2)
return 0;
}
顯然調用內部B ::克A :: f()的()將對於int模板類型失敗。我的問題是電話在什麼時候失敗?在(1)或(2)?我認爲它應該是(1),因爲那時編譯器會創建一個新的類,其中的模板類型爲int並編譯它。該編譯應該在f()中失敗是正確的?
什麼是main()的輸出? – John 2010-02-19 21:04:45
@John:沒有,因爲編譯會失敗。 – 2010-02-19 21:08:48
哦,好的。我很困惑,因爲你在談論「在什麼時候調用失敗」 - 並且在代碼中評論了點 - 就好像它已經編譯一樣。 – John 2010-02-19 21:41:04