执行在c ++中存储为字符串的函数

时间:2013-03-04 09:47:32

标签: c++ string function

是否可以执行存储为字符串的函数? 例如,执行以下形式的函数:

string str="myFunction()";

-> here i would like to execute "myFunction()";

谢谢!

7 个答案:

答案 0 :(得分:2)

您必须将其编译到共享库中,加载该库并调用它。它可以做到,但它并不漂亮。最有可能的是,有一种很好的方法可以做你想做的任何事情。

答案 1 :(得分:2)

除了David所说的,你还可以创建一个映射,其中每个节点都包含函数的名称和指向函数的指针。然后在映射中按名称查找节点并调用函数指针。这假设所有函数都具有相同的原型。

答案 2 :(得分:0)

您可以使用Qt库和QMetaObject::invokeMethod

QMetaObject::invokeMethod( pObject, "myFunction" );

答案 3 :(得分:0)

当从某个DLL文件导出函数时,可以执行此操作。

void (*myFunction)();
HMODULE library = LoadLibrary("LIBRARY.DLL");

myFunction = GetProcAddress(library, "myFunction");

myFunction();

FreeLibrary(library);

但这并不是你想要的。因为你不了解C ++的内部。

答案 4 :(得分:0)

不,因为C ++是一种静态编译语言,所以这不是直接可行的。编译期间(通常)函数和变量名称丢失。除了像David建议的那样使用共享库/ DLL之外,您还可以使用std::map并将函数存储在其中,例如(另):

#include <functional>
#include <iostream>
#include <unordered_map> // or just <map>

void myFunction() {
    std::cout << "in myFunction\n";
}

void anotherFunction() {
     std::cout << "in anotherFunction\n";
 }

 int main() {
    std::unordered_map<std::function<void()>> functions; // or just std::map

    // Store the functions
    functions["myFunction"] = &myFunction;
    functions["anotherFunction"] = &anotherFunction;

    // Call myFunction
    functions["myFunction"](); // Prints "in myFunction".
 }

正如c.fogelklou已经说过的,这些功能必须具有兼容的原型;通过字符串传递参数甚至需要编写解析器。

另请参阅std::unordered_mapstd::function的文档。

答案 5 :(得分:0)

你最好尝试使用python,ruby甚至是matlab而不是c ++。

但是如果你坚持,你可以尝试在你的项目中集成LUA。

它可以解决您的问题。

答案 6 :(得分:0)

您也可以创建并嵌入语言解析器,处理和评估您提供的字符串。

进一步阅读: