c++中以字符串形式存储的Execute函数
execute function stored as a string in c++
是否可以执行存储为字符串的函数?例如:
执行一个函数string str="myFunction()";
-> here i would like to execute "myFunction()";
谢谢!
您必须将其编译为共享库,加载该库并调用它。这是可以做到的,但并不漂亮。最有可能的是,无论你想做什么,都有一个好方法。
除了David所说的,您还可以创建一个映射,其中每个节点包含函数的名称和指向函数的指针。然后在映射中按名称查找节点并调用函数指针。这假定所有函数都具有相同的原型。
您可以使用Qt库和QMetaObject::invokeMethod
QMetaObject::invokeMethod( pObject, "myFunction" );
当函数从某个DLL文件导出时可以这样做。
void (*myFunction)();
HMODULE library = LoadLibrary("LIBRARY.DLL");
myFunction = GetProcAddress(library, "myFunction");
myFunction();
FreeLibrary(library);
但这并不是你想要的。
不,因为c++是一种静态编译语言,这是不可能的。函数名和变量名(通常)在编译过程中丢失。除了像David建议的那样使用共享库/DLL之外,您还可以使用std::map
并将您的函数存储在其中,例如(未经测试):
#include <functional>
#include <iostream>
#include <unordered_map> // or just <map>
void myFunction() {
std::cout << "in myFunctionn";
}
void anotherFunction() {
std::cout << "in anotherFunctionn";
}
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的文档
你最好试试python、ruby甚至matlab,而不是c++。
但是如果你坚持,你可以尝试在你的项目中集成LUA。
可以解决你的问题。
您还可以创建和嵌入语言解析器,该解析器处理和计算您提供的字符串。
进一步阅读:
- http://en.wikipedia.org/wiki/Parsing#Programming_languages——起点
- http://en.wikipedia.org/wiki/Domain-specific_language——这是你想做的
- http://www.boost.org/doc/libs/1_53_0/libs/spirit/doc/html/index.html——可以帮助你的工具
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 添加存储在向量中的大整数的函数出现问题
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 在std::vector上存储带有模板的类实例
- 谷歌测试中的期望值存储在哪里
- 为什么C中的通用链表中存储的数据已损坏
- 在c++中获取两个大int,并将它们存储在数组中
- c++中以字符串形式存储的Execute函数