C++ 运行时成员函数按字符串名称访问

标签 c++ function-pointers

我有两个类:

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/

相关文章:

c++ - C++中的回调函数

c++ - 使用 boost.spirit 2 存储表达式的行号

c++ - 扩展包含 int 包的类型

c++ - 以 void (*)() 作为值的 Unordered_map 插入无法正常工作

c - 在 C 为什么函数指针更适合函数回调?

c++ - 通过指针调用静态成员函数

c++ - 如何在 C++ 中将 `.a` 文件导入 CMake?

c++ - 将来自类的特定实例的函数分配给变量以保持状态

c - 指针函数返回值问题

c++ - 函数指针类型之间的转换