在C ++中,lambda表达式名称由编译器自动产生(至少在VCC编译器上看起来像这样:lambda_cf01cxf...
。
有什么方法可以将生成的名称更改为更易理解的名称(即使是不可移植的也没关系)
答案 0 :(得分:-1)
这是一种创建命名为lambda的方法
#include <iostream>
#include <type_traits>
using namespace std;
#define CREATE_NAMED_LAMBDA(name, lambda) \
[](auto&& fun)\
{\
using lambdaType = typename decay<decltype(fun)>::type;\
struct lambda_ ## name : lambdaType\
{ using lambdaType::operator(); };\
return lambda_ ## name{forward<decltype(fun)>(fun)};\
}(lambda)
int main()
{
auto lamb = CREATE_NAMED_LAMBDA(my, [](int i) { cout << i; });
lamb(7);
}
在非调试版本和许多其他改进中,可以使宏名称更小,使其为空(仅传递lambda)。但是有一个陷阱:该代码对您没有帮助。至少暂时是因为它使最新的MSVC编译器崩溃。可以跟踪there的错误报告。