是否可以从外部设置 lambda 主体?
例子:
经典 lambda:
[](double x, double y) -> double { return x + y; };
我想做的是这样的(捕捉想法,这不是工作代码):
const char * const EXPRESSION_FROM_VARIABLE = "x + y";
[](double x, double y) -> double { return EXPRESSION_FROM_VARIABLE; };
基本上我想在编译时将字符串更改为“表达式”。
最佳答案
这在纯可移植的 C++11 中是不可能的。我想 EXPRESSION_FROM_VARIABLE
仅在运行时 已知(与您的伪代码不同)。如果它在编译时是静态已知的,使用一些宏技巧,生成(在构建时)一些中间 C++ 文件并#include
它,等等...
但是,您可能希望嵌入一些解释器(例如 GNU Guile 或 LUA ),或使用 JIT compilation techniques (以及像 LLVM 、 libjit 、 libgccjit 、 GNU lightning 、 asmjit ……这样的库)甚至(就像我在 MELT 中所做的那样)生成 C++ 代码并 fork 其编译 -在运行时-进入一个插件和dlopen(3)那个插件等等。
您需要更多地了解编程语言、编译器和解释器。另见 this answer在程序员上。
另请注意,您可以分配一些 std::function
来自 lambda。
关于正文为 "dynamic"的 C++ lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29692887/