3
在重構一個相當龐大的代碼庫的過程中,我的編譯器提出了一個很好的方式來誤解我。這就是我講的一個小例子:C++通過模板和虛函數實現瘋狂
鐺3.6,GCC 4.7,GCC 4.8和gcc 4.9所有的標記化 「b.get(7)」 作爲b.get之間」比較運算符「和」char「。
template-test.cpp: In function ‘int main(int, char**)’:
template-test.cpp:16:17: error: invalid use of non-static member function
std::cout << b.get<char>(7) << std::endl;
^
template-test.cpp:16:21: error: expected primary-expression before ‘char’
std::cout << b.get<char>(7) << std::endl;
^
(這是GCC 4.9,別人說類似的東西)
難道這工作?
我發現的解決方法是在基類和派生類中聲明模板「get」。
這個「重載到基類」是我聽說過的,但顯然沒有經常考慮。感謝您的教訓。 – 2015-02-09 17:34:53
@PhilippT:我猜你可以搜索「名稱隱藏」以瞭解更多信息。歡呼:) – 2015-02-09 17:35:27
如何'std :: cout << b.Foo::(7)<< std :: endl;'? –
2015-02-09 17:44:01