【发布时间】:2016-01-16 20:53:55
【问题描述】:
我希望能够在运行时判断一个类的实例是否实现了一个虚函数。例如:
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
【问题讨论】:
-
也许我不明白你在问什么。虚函数意味着在派生类中被覆盖...
-
练习的最终目标是什么?如果我在
Deriv中添加类似virtual void func2(int x) { Base::func2(x); }的内容,你为什么要这个事实——按理说什么应该是无操作的——来改变你的程序的行为? (无论如何,我认为你不能。) -
我现在添加了一些默认实现,因此您可以想象这些函数正在执行的操作有。他们所做的与我的问题无关:我只想找出 if 函数是否被覆盖。
标签: c++ c++11 overriding virtual c++14