将编译器生成的C ++ lambda名称更改为易于阅读的名称

时间:2018-09-07 08:40:13

标签: c++ visual-c++ lambda

在C ++中,lambda表达式名称由编译器自动产生(至少在VCC编译器上看起来像这样:lambda_cf01cxf...

有什么方法可以将生成的名称更改为更易理解的名称(即使是不可移植的也没关系)

1 个答案:

答案 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的错误报告。