我希望能夠在運行時告訴一個類的實例是否實現了一個虛函數。例如:我可以告訴我是否實現了一個C++虛函數
struct Base
{
virtual void func(int x) { <default behavior here> }
virtual void func2(int x) { <default behavior here> }
};
struct Deriv : Base
{
virtual void func(int x) override { <new behavior here> }
};
int main()
{
Base *d = new Deriv;
if(implements<Base::func(int)>(d)) // This should evaluate true
{}
if(implements<Base::func2(int)>(d)) // This should evaluate false
{}
}
我已經看到了這一點,但它是過時的,有可能是一些C++ 11月14日現在必須說: Ways to detect whether a C++ virtual function has been redefined in a derived class
也許我不明白你在問什麼。虛擬函數意味着在派生類中被覆蓋... – user5406764
練習的最終目標是什麼?如果我將'Deriv'添加到'virtual void func2(int x){Base :: func2(x); }「爲什麼你想要這個事實 - 權利應該是一個沒有用的東西 - 改變你的程序的行爲? (無論如何,我認爲你可以。) –
我已經添加了一些默認實現,所以你可以想象這些功能正在做什麼。他們在做什麼與我的問題沒有密切關係:我只想找出_if_函數是否被覆蓋。 – user5406764