檢測非虛覆蓋我要檢測一個功能是(靜態)覆蓋在派生類中:如何在編譯或運行時
template< typename T >
struct A{ void func(){ static_cast<T*>(this)->func(); } };
struct B: A<B>{};
struct C: A<C>{ void func(){ std::cout << "class C" << std::endl; };
C c;
if(&A<C>::func != &C::func)
c.func();
很顯然,我不會叫「功能」,如果它沒有覆蓋。 我更喜歡直接回答我的問題。告訴實際問題以確定超載。 我也很感激任何答案,顯示其他方法來解決一般問題。
好的,它編譯,我還沒有找到我的實際代碼的差異,那沒有。順便說一句,在我的實際代碼中,我不只是試圖避免調用函數,還有一些。我真的想知道該函數是否被覆蓋,或者如果我需要使用完全不同的方法。
這聽起來很像SFINAE的工作原理。 http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error –
你的代碼沒有意義:'A'是一個模板,但在第2行之下,你可以像使用非模板一樣使用它。 –
那麼,如果您修復了所有編譯器錯誤,則此指針比較似乎可行。所以? – UncleBens