C 运行时成员函数通过字符串名称访问
C++ runtime member function access by string name
我有两个类:
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);
如果要通过AddMethod
的所有功能都具有相同的签名(可能是在绑定某些参数之后),则可以使用此签名:
void AddMethod(std::string name, boost::function<int ()> func);
并这样使用:
info.AddMethod("GetFileId1", std::bind1st(std::mem_fun(&MyClass::GetFileId1), &MyClassInstance);
如果功能具有不同的签名,则可以使用boost::function_base
:
void AddMethod(std::string name, boost::function_base func);
您像上面一样使用它。现在的挑战是确切找出boost::function
对象中存储的类型,以便您可以使用它。
相关文章:
- 为什么没有访问所有字符串字符?
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 循环访问还包含未使用元素的字符串数组
- 循环访问资源字符串表
- 在qt创建器中调试时如何访问字符串变量的完整值?
- 当我用"ñ"字符循环访问字符串时出现奇怪的结果
- 如何在读取文件时访问以前的字符串?
- C++字符串问题-如何访问字符串元素
- 访问包含P的有效索引时返回空格的C++字符串
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- C++/CLI访问字符串::来自非CLI代码的格式
- 需要从字符串数组的一部分访问元素
- 是否可以从字符串访问变量?
- 循环访问 c++ 中的字符串
- 循环访问字符串片段
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- 如何在 Qt/C++ 中仅将文件路径作为字符串访问文件
- C 使用字符串访问变量
- 基于字符串访问类成员
- 动态 C 字符串访问