是否可以在lambda中找到捕获变量的数量/类型

Is it possible to find the number/type of the captured variables in a lambda?

本文关键字:变量 类型 lambda 是否      更新时间:2023-10-16

当通过值或引用访问时,是否可以自动实现lambda捕获的变量的数量?还有可能破译它们的类型吗?例如,假设这段代码:

int a = 47;
int b = 48;
long long c = 49;
auto f1 = [=](){ return a + b; };
auto f2 = [=](){ return a + b + c; };

如果像下面这样调用,是否可以有一个名为count_args的函数,在一行中返回2,在下一行返回3

std::cout << count_args( f1 ) << "n" << count_args( f2 );

否,因为问题隐含地假设捕获的变量实际上是成员变量。然而,编译器被赋予了更大的自由度。正如Ajay在评论中指出的那样,一个好的优化器可以用提升的表达式替换成员,也可以更改类型、使用非C++类型等等。因此,您可以捕获struct color { char R,G,B },而lambda实际上只存储.R.Gcount_args现在是2/3吗?