如何在c ++中动态调用函数

joe*_*els 11 c++ function

除了boost(Bind&Function)之外,如何在C++中动态调用函数?

PHP有:

$obj = new MyObject();
$function = 'doSomething';
$obj->$function();
Run Code Online (Sandbox Code Playgroud)

Objective-C有:

MyObject *obj = [[MyObject alloc] init];
SEL function = NSSelectorFromString(@"doSomething");
[obj performSelector: function];
Run Code Online (Sandbox Code Playgroud)

Kon*_*hin 8

您可以导出必要的函数(例如,通过使用__dllexport标记它们)并使用GetProcAddress或dlsym(取决于您的平台)来获取它们的地址:


void *handle = dlsym(0, RTLD_LOCAL | RTLD_LAZY);
FunctionType *fptr = (FunctionType *)dlsym(handle, "doSomething");
fptr();


HANDLE handle = GetCurrentProcess();
FunctionType *fptr = (FunctionType *)GetProcAddress(handle, "doSomething");
fptr();

所有这些都是特定于平台的,并且在C++中没有标准的方法来实现这一点.

  • 不能抱怨,那是一个很好的答案.但是我会指出它对于C函数的动态调用很有用,而不适用于多态C++方法调用. (3认同)

str*_*lep 2

如果您感兴趣的函数属于同一类型,您可以创建字符串和函数指针的映射。