1
我正在嘗試檢查某個對象實例上的虛擬函數是否來自某個實現。直觀上,它看起來像下面的代碼段:如何檢查對象實例上的虛擬函數是某種實現
#include <cstdio>
using namespace std;
class A
{
public:
virtual void method()
{
printf("This is from A \n");
}
};
class B : public A
{
public:
virtual void method()
{
printf("This is from B \n");
}
};
int main()
{
B b;
b.method();
if (b.&method == &B::method)
{
printf("Horray! simple. \n");
}
return 0;
}
但很明顯的線if (b.&method == &B::method)
不起作用。
你能不能建議這應該如何工作?謝謝。
也許如果你能解釋*爲什麼*你想這樣做,我們可以幫助你更好?什麼是你想解決的*實際*問題?相關閱讀[關於XY問題](http://xyproblem.info/)。 –
如果這是B型的對象,那麼明顯的方法是B超負荷。所以不能理解這個問題。 –
我不知道這個答案,從面向對象的角度來看,它實際上是錯誤的。如果你使用虛擬功能,你應該只是打電話給他們,不要擔心實施。處理此規則的例外時,通常會檢查對象的類型([typeid](http://en.cppreference.com/w/cpp/language/typeid),dynamic_cast) – stefaanv