【问题标题】:toString of lambda expressions in c++?c++中的lambda表达式的toString?
【发布时间】: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 主体。但这只是代码的字符串表示,没有解析类型、函数等。

标签: c++ lambda tostring


【解决方案1】:

不,没有。 C++ 是一种没有任何reflection 的语言。这样的功能是不可能实现的。

可能的解决方法包括将 lambda 源放在程序中的字符串文字中,或者例如从程序中读取源文件。

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2010-11-28
    • 2013-04-28
    • 1970-01-01
    相关资源
    最近更新 更多