C++ 如何在lambda捕获中显式捕获宏?

C++ 如何在lambda捕获中显式捕获宏?,c++,lambda,macros,C++,Lambda,Macros,我有一个lambda,想打印lambda在其中定义的函数的名称。如果我在lambda中使用\uuuu函数,它只会打印操作符(),这是合理的,因为宏就是在这个函数中 但是,Clang Tidy对此提出警告,并提到以下内容: 叮当声:在lambda中,“_函数_uu”扩展为函数调用操作符的名称;考虑捕获En闭包函数的名称显式< /P> 是否有任何方法可以捕获封闭函数的名称,而无需在lambda之前用const char*name=\uuuuuu function\uuuu声明它,并捕获name。也就

我有一个lambda,想打印lambda在其中定义的函数的名称。如果我在lambda中使用
\uuuu函数
,它只会打印
操作符()
,这是合理的,因为宏就是在这个函数中

但是,Clang Tidy对此提出警告,并提到以下内容:

叮当声:在lambda中,“_函数_uu”扩展为函数调用操作符的名称;考虑捕获En闭包函数的名称显式< /P> 是否有任何方法可以捕获封闭函数的名称,而无需在lambda之前用
const char*name=\uuuuuu function\uuuu
声明它,并捕获
name
。也就是说,类似这样的事情:

#include <iostream>

int main()
{
    [&__FUNCTION__](){
        std::cout << __FUNCTION__ << std::endl;  // Should print "main".
    }();

    return 0;
}
#包括
int main()
{
[&_;u函数](){

std::cout是的,因为C++14可以使用lambda捕获初始值设定项,它允许按名称捕获任意表达式。因此解决方案是:

#include <iostream>

int main()
{
    [function_name=__FUNCTION__](){
        std::cout << function_name << std::endl;  // Prints "main".
    }();

    return 0;
}
#包括
int main()
{
[函数名称=uu函数名称](){

是的,我认为这似乎是一个合理的重复。虽然这些问题并不完全来自同一个基本问题,但它们非常相似,其他人也会回答这个问题。好的,听起来不错。我认为这是一个有用的路标,所以感谢你发布它。
#include <iostream>

int main()
{
    [function_name=__FUNCTION__](){
        std::cout << function_name << std::endl;  // Prints "main".
    }();

    return 0;
}