我有一个要解决的特定问题,我不确定是否有可能,因为我找不到任何信息或完成的示例。
基本上,我有:
class ParentObject {};
class DerivedObject : public ParentObject
{
void myFunction(){}
};
class OtherDerivedObject : public ParentObject
{
void myOtherFunction(){}
};
并希望有一个指向ParentObject::*的函数指针,并使其能够从任一派生类中获取函数。
我想这样做的原因,我还有另一个类(class)
class functionRegistry
{
std::map<string, *functionPoint> functionMap;
}
并且每个对象(理想情况下是在ParentObject中,但可以在派生对象中单独执行)都具有functionRegistry的实例,我需要functionPoint能够指向DerivedObject或OtherDerivedObject类型的对象中的函数。
提前致谢
最佳答案
您只需要一个static_cast
,即可使用正确的类型填充 map 。
using pfunc_type = void (ParentObject::*)() ;
pfunc_type pfunc1 = static_cast<pfunc_type>(&DerivedObject::myFunction);
由于标准允许:
[expr.static.cast / 12]-§5.2.9¶12
但是,尽管允许这样做,但您必须非常小心以确保将指针应用于具有正确动态类型的对象上的成员。