有没有办法在运行时确定对象是否可以在C++中执行方法?

Jak*_*ake 2 c++ runtime introspection rtti

在Perl中,有一个UNIVERSAL :: can方法可以调用任何类或对象来确定它是否能够执行某些操作:

sub FooBar::foo {}
print "Yup!\n" if FooBar->can('foo'); #prints "Yup!"
Run Code Online (Sandbox Code Playgroud)

假设我在C++中有一个基类指针,它可以是许多不同的派生类中的任何一个,是否有一种简单的方法来完成与此类似的操作?我不想触及其他派生类中的任何内容,我只能更改调用该函数的基类中的区域,以及支持它的派生类.

编辑:等等,现在这是显而易见的(永远不要回答问题),我可以在基数中实现它,返回一个代表UNIMPLEMENTED的数字,然后在调用时检查返回不是这个.我不确定为什么我会以如此复杂的方式思考问题.

我也在想我会从另一个实现的类派生出来foo然后看看这个类的动态转换是否有效.

Chr*_*isW 7

如果您有一个指向基类的指针或引用,您可以使用它dynamic_cast来查看它是哪个派生类(以及它支持的派生类的方法).


sep*_*p2k 5

如果可以向基类添加方法,则可以virtual bool can_foo() {return false;}在具有foo的子类中添加并覆盖它以返回true.