代码之家  ›  专栏  ›  技术社区  ›  Rostyslav Dzinko Ankit

将编译器生成的C++ lambda名称更改为人类可读的一个[复制]

  •  1
  • Rostyslav Dzinko Ankit  · 技术社区  · 8 年前

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

    有没有什么方法(即使是不可移植的也无所谓)可以将生成的名称更改为更易于阅读的名称?

    1 回复  |  直到 8 年前
        1
  •  -1
  •   ixSci    8 年前

    下面是创建命名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 .