我有两个类:
class MyClassInfo {
public:
void AddMethod(std::string name, void* pointer); // I don't know what signature should be
}
class MyClass
{
public:
void SetField1(int f1);
int GetFileld1();
private:
int field1;
};
我需要能够在运行时通过名称(字符串)访问 MyClass
的方法。我不想使用任何库(boost 除外)和/或编译器功能(例如 rtti)来执行此操作。
我不知道应该在AddMethod
方法中使用哪个签名,因为我不知道如何将函数指针传递给函数。此函数必须是允许添加任何方法的通用函数。也许您知道一个更好的变体如何在没有 MyClassInfo
的情况下做到这一点。任何帮助将不胜感激。
最佳答案
这在直接 C++ 中是不可能的。您将不得不考虑替代方案,例如创建成员函数指针的名称映射。但即便如此,也需要一致的方法签名。
有点像
std::map<std::string, int (MyClass::*)(void*))
例如。您的 AddMethod
签名将如下所示
void AddMethod(std::string name, int (MyClass::* pointer)(void*));
你会这样调用它
info.AddMethod("someMethod", &MyClass::someMethod);
关于C++ 运行时成员函数按字符串名称访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273906/