是否可以执行存储为字符串的函数? 例如,执行以下形式的函数:
string str="myFunction()";
-> here i would like to execute "myFunction()";
谢谢!
答案 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_map和std::function的文档。
答案 5 :(得分:0)
你最好尝试使用python,ruby甚至是matlab而不是c ++。
但是如果你坚持,你可以尝试在你的项目中集成LUA。
它可以解决您的问题。
答案 6 :(得分:0)
您也可以创建并嵌入语言解析器,处理和评估您提供的字符串。
进一步阅读: