Мне нужно записать (для целей аудита/ведения журнала) код лямбда-функций, которые передаются в моем коде. Конечно, объект лямбда также должен быть сохранен. Так что я придумал макросъемки решения следующим образом:Строка препроцессора C++, которая сохраняет символы новой строки?
#define LAMBDA_AND_STRING(lambda) lambda, #lambda
using namespace std;
int main(int argc, const char * argv[])
{
auto p = pair<function<void()>, string> (LAMBDA_AND_STRING([] {
cout << "Hello world!" << endl;
cout << "Hello again!";
}));
cout << "CODE:" << endl << p.second << endl << endl;
cout << "EXECUTION:" << endl;
p.first();
cout << endl;
}
Это выходы:
CODE:
[] { cout << "Hello world!" << endl; cout << "Hello again!"; }
EXECUTION:
Hello world!
Hello again!
Это почти хорошо, но новые строки из определения лямбды ушли (на самом деле мои лямбды гораздо больше чем в вышеупомянутом прототипном примере, поэтому сохранение новых строк необходимо для удобства чтения). Любые идеи о том, как их сохранить? (C++ 11 в порядке).
Спасибо!
Как использовать ';;' как разделитель строк? Короче, яснее и не влияют на исходный источник без макроса. –
@tehinternetsismadeofcatz: это не влияет на этот источник, хотя это может повлиять, например, на вызов алгоритма с несколькими подробными аргументами, который был разделен на несколько строк. –
Это хороший момент. –