lambdas不使用功能接受std ::功能
Lambdas not working with function accepting std::function
为什么这不与lambdas一起使用?它只有在调用我想要的函数之前将lambda对std ::函数进行cand ::函数时起作用。当我将lambda构建到位或将lambda分配到自动时不起作用。
#include <functional>
template <typename R>
R foo (std::function<R()> fun)
{
puts(__PRETTY_FUNCTION__);
}
int main()
{
std::function<int()> lambda = []{ return 1; };
foo (lambda); // --> OK
foo ([]() -> int { return 1; } ); // --> ERROR
auto lambda2 = []{ return 1; };
foo (lambda2); // --> ERROR
}
问题是<R>
无法从lambda中推论。实际上,R
有很多类型,因此std::function
可以容纳您的lambda。
当提供的参数为 std::function<int()>
时,可以将R
琐碎地推导为int()
。但是Lambda有自己的独特类型。不是std::function
。
您需要将模板参数添加到foo
:
foo<int> ([]() -> int { return 1; } ); // --> OK
foo<int> (lambda2); // --> OK
相关文章:
- "xshared_expression"不能接受xfunction表达式
- 为什么此参数包不能接受函数指针?
- 特征:功能签名接受固定尺寸和类型的一般矩阵表达
- istringstream-function string_to_int不能接受C-STR,为什么
- C 超载相等运算符.我应该写自己的功能以接受通过参考或值传递的参数
- 为什么 std:map 不能接受指针作为键值?
- C++:强制实施函数,使其不能接受按值传递的任何参数
- 我不能接受getline
- 为什么我的 select() 不能接受新客户端?
- 为什么"auto"在推导返回值时不能接受大括号的初始化列表?
- 这是编写功能模板的正确方法,该功能模板接受具有可变数量参数的功能指针
- C++constexpr函数真的能接受非常量表达式作为参数吗
- 什么不能接受字符串向量并用 offest 和 assigmnet 运算符替换任何字符串的字符?
- 为什么 std::function 不能接受推导类型作为其模板参数
- "官方"CUDA 减少功能不能接受某些数字?
- 枚举类型不能接受 CIN 命令
- 为什么 std::map::insert 不能接受键和值而不是 std::p air?
- 为什么函数中的局部数组不能接受一个不稳定的参数?在c++中
- 这两个功能能合二为一吗?
- 不能接受值对象- c++