如何对lambda中捕获的变量的类型进行明确说明
How to be explicit about the type of a captured variable in a lambda?
如何明确指定c 中的lambda捕获变量的类型?
例如,假设我具有一个通用引用的函数,我想将其完美地向lambda。
我发现,我可以为此使用std::tuple
,如下所示,但是我想知道是否有更简洁的方式。
template<typename T>
auto returns_functor (T&& value)
{
return [value = std::tuple<T> (std::forward<T> (value))] ()
{
/* use std::get<0> (value) */
};
}
相关:在lambda中捕获完美的变量(那里的答案表明这是一个不同的问题,但进一步的答案本质上给出了上述解决方案(。
捕获rvalue(通用参考(的另一种方式如下,
template< typename T>
T getRvalue( T&& temp)
{
auto lambda = [ rTemp = std::move( temp)]() mutable
{
return T( std::forward< T>( rTemp));
};
return lambda();
}
std::move()
允许捕获可移动类型的对象,这些对象无法通过复制捕获。 mutable
在Lambda中非常重要,直到不使用mutable
为止,lambda捕获的对象无法修改,并且编译将产生以下错误,
cannot conver 'rTemp (type 'const T') to type 'std::remove_reference<T>::type&' {aka 'T&'}
return T( std::forward< T>( rTemp));
现在关于第一个问题, 在此,
"我如何明确指定C 中lambda的捕获变量的类型?,编译将做到这一点,请参见以下链接,
https://en.cppreference.com/w/cpp/language/lambda
它用简单的单词陈述 A capture with an initializer acts as if it declares and explicitly captures a variable declared with type auto, whose declarative region is the body of the lambda expression.
,这意味着自动变量根据初始器来推导,并且不需要明确指定其类型,例如
P> int x = 1;
auto lambda = [ y = x + 2](){ std::cout<< "y = "<< y<< std::endl;};
y
将由 int
推导为CC_7。
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 赋值到类型和空大括号. 语法说明
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 如何对lambda中捕获的变量的类型进行明确说明
- ADTF 无结构类型"错误的媒体说明
- 返回对特定尺寸数组的引用,而无需明确说明返回类型中的大小
- 详细说明的类型说明符中的类型相关嵌套名称说明符
- 说明 资源路径位置类型 'UINT16_MAX' 未在此范围内声明
- 类类型的详细说明的类型说明符
- C 函数声明对类型"void(*fcn)(void*)"参数的说明
- 清楚地说明 * 和 & 作为类型的一部分和作为取消引用/address_of操作符之间的区别
- c++规范是否说明如何在static_cast/const_cast链中选择用于C风格强制转换的类型?
- 在c++中,如果我没有说明要抛出什么类型的对象,抛出什么抛出语句