是否可以在lambda中找到捕获变量的数量/类型
Is it possible to find the number/type of the captured variables in a lambda?
当通过值或引用访问时,是否可以自动实现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
和.G
。count_args
现在是2/3吗?
相关文章:
- c++类声明时,相同的例程,不同的成员变量类型
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 创建类似于布尔值的变量类型
- std::cin 从控制台获取两种不同的变量类型,'storing'以后使用第二种类型?
- 如何使用变量模板比较 C++ 17 中的变量类型?
- 是否有一个库可以检查C++中的变量类型?
- 与不同变量类型相比,用于变量的 Clang AST 匹配器
- 继承类中的 C++ 成员变量类型重写
- 如何在编译器时动态获取元组内的变量类型C++?
- 在C++中动态分配变量类型
- 用于浮点值的最佳变量类型
- 定义变量类型
- 错误 - 变量类型 "X" 是一个抽象类 - c++
- 在函数 (c++) 中分配变量类型和大小数组
- 具有容器变量类型的类模板
- 获取变量类型名称
- 沿枚举 c++ 返回变量类型
- 是否可以通过模板指定抽象类变量类型
- 什么是变量类型位(32)
- C++ 在知道变量类型之前使用自动定义的变量