Ale*_*lex 4 c++ evaluation dynamic
如何在C++中处理动态源代码?是否可以使用eval("foo")之类的东西?
我有一些需要根据用户的选择调用的函数:
void function1 ();
void function2 ();
...
void functionN ();
int main (int argv, char * argv [])
{
char * myString = new char [100];
...
myString = "1" //user input
cout << eval("function"+myString)();
}
Run Code Online (Sandbox Code Playgroud)
通常怎么做?
UPD:基于slacy和clinisbut的答案,我认为我需要创建一个函数注册表.我想它应该作为一个指向函数的指针数组.这是问题,如何声明函数指针数组?
ala*_*mar 17
你问题的真正答案是这样的:
extern "C" {
void function1 ();
void function2 ();
void function3 ();
}
int main (int argv, char * argv [])
{
char * myString = new char [100];
...
myString = "function1"; //user input
void (*f)() = dlsym(RTLD_NEXT, myString);
f();
}
Run Code Online (Sandbox Code Playgroud)
您可以获取二进制文件中定义的函数(通过名称,如果它是用extern"C"声明的),并调用它.
在Windows上,它变得更加丑陋,但仍然可能 - 阅读GetProcAddress