C++中的动态源代码

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

  • 不,不是.它基本上是封面下所有插件系统的工作方式. (2认同)

sla*_*acy 16

C++是一种编译语言,因此,没有相当于"eval()"的东西.

对于您提到的具体示例,您可以创建一个函数注册表,将输入(字符串)映射到输出(函数指针),然后调用结果函数.

有几个可用的C++解释器库,虽然性能很差,但它们可以完成你想要的.谷歌搜索"C++解释器".我看过" Ch "," CINT "和"clipp"的结果


Naa*_*aff 7

如果你真的需要,你可以在你的程序中嵌入一​​个C/C++解释器.但是,您也可以嵌入更类似脚本的语言.