正文为 "dynamic"的 C++ lambda 表达式

标签 c++ lambda

是否可以从外部设置 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 GuileLUA ),或使用 JIT compilation techniques (以及像 LLVMlibjitlibgccjitGNU lightningasmjit ……这样的库)甚至(就像我在 MELT 中所做的那样)生成 C++ 代码并 fork 其编译 -在运行时-进入一个插件和dlopen(3)那个插件等等。

您需要更多地了解编程语言、编译器和解释器。另见 this answer程序员上。

另请注意,您可以分配一些 std::function来自 lambda。

关于正文为 "dynamic"的 C++ lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29692887/

相关文章:

c++ - 在 lambda 中没有按值分配拷贝

Python正则表达式替换,用lambda函数,覆盖非捕获组

c++ - 是否有任何理由在预分配内存中的 POD 结构上调用 new?

c++ - 关于如何使用此代码段实现 SFINAE 的问题

c++ - 仅当指针不是 nullptr 时调用方法

c++ - 忽略: warning: unused parameter有什么后果

C++ 无法在类(和命名空间)中重载函数

python - lambdas 有什么用?

java - 在正文中忽略参数时编写 lambda 表达式

c# - 将包含 IN 语句的 SQL 转换为可链接的 LINQ