【发布时间】:2020-04-18 08:35:33
【问题描述】:
有没有办法打印一个 C++ lambda 表达式并查看它所代表的函数的文本表示?这是一个简单的例子,说明我的意思:
#include <iostream>
#include <functional>
const char *toString(const std::function<int(int)> &f)
{
// then a magic happens ...
return "if (...) { ... }";
}
int main(int argc, char **argv)
{
auto f1 = [=](int i){ if (i<5) {return 8*2;} else {return 2;} };
auto f2 = [=](int i){ if (i>3) {return i*i;} else {return 7;} };
std::cout << toString(f1) << "\n";
}
有什么方法可以做到这一点?
【问题讨论】:
-
不,答案很简单。您所要求的似乎等同于 C++ 的反汇编程序。不可能的事情。
-
您可以在宏表达式中编写您的 lambda 主体。但这只是代码的字符串表示,没有解析类型、函数等。