【发布时间】:2013-11-13 12:13:39
【问题描述】:
我需要记录(出于审计/日志记录目的)在我的代码中传递的 lambda 函数的代码。当然,lambda 对象也需要保存。于是我想出了一个宏解决方案如下:
#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!
这几乎很好,但是 lambda 定义中的换行符消失了(实际上我的 lambdas 比上述原型示例中的要长得多,因此出于可读性的原因需要保留换行符)。关于如何保留它们的任何想法? (C++11 很好)。
谢谢!
【问题讨论】:
标签: c++ c++11 c-preprocessor