ToString лямбда-выражений в C ++? - PullRequest
0 голосов
/ 18 апреля 2020

Есть ли способ напечатать лямбда-выражение C ++ и увидеть текстовое представление функции, которую оно представляет? Вот простой пример, показывающий, что я имею в виду:

#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";
}

Есть ли способ добиться этого?

1 Ответ

1 голос
/ 18 апреля 2020

Нет, нет. C ++ - это язык без какого-либо отражения . Невозможно реализовать такую ​​функцию.

Возможные обходные пути включают помещение лямбда-источников в строковый литерал в вашей программе или, например, чтение исходного файла из вашей программы.

...