无法将std::bind的结果转换为std::函数
Cannot convert result of std::bind to std::function
我在下面的代码片段中遇到了麻烦:
std::promise<int> promise;
auto operation = [](std::promise<int> promise) { promise.set_value(1); };
auto fn = std::bind(operation, std::move(promise));
fn();
使用clang
得到以下错误:
候选模板被忽略:替换失败[with _Args = <>]:隐式实例化未定义模板'std::__1::__bind_return<(lambda at promise.cpp:7:12),Std::__1::tuple>, Std::__1::tuple<>, false>'操作符()(_Args&和;…__args)
提前感谢!
绑定对象作为左值传递,并且不能复制promise
。
让你的lambda接受左值引用将使你的代码编译,但可能不是一个好主意。
auto operation = [](std::promise<int>& promise) { promise.set_value(1); };
// ^
Igor是非常正确的,但对于我的目的,这工作得很好,并且是c++11
兼容:
std::promise<int> promise;
auto operation = [](std::promise<int>& promise) { promise.set_value(1); };
std::packaged_task<void ()> fn { std::bind(operation, std::move(promise)) };
fn();
通过将operation
更改为对std::promise
的引用而不是值,并使用可移动且不可复制的std::packaged_task
,我可以实现具有可以传递的函数的原始目标,该函数保存std::promise
。
相关文章:
- 将无符号char*转换为std::istream*C++
- 将 int 数组转换为 std::vector<int*>
- 如何将这个std::字符串转换为std::基本字符串
- 哪些类型可以转换为std::any
- 如何在对<char>C++程序进行逆向工程的同时将 std::basic_string 转换为 Rust 可读值?
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 将函数参数"const char*"转换为"std::string_view"是
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 字符转换功能 std::isupper() & std::islower() C++17
- 将函数包装器转换为 std::function
- 如何将 std::ifstream 转换为 std::basic_istream<CharT, Traits>&?
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- std::转换move构造函数的模板专业化的变体
- STD ::转换如何用特定值初始化函子
- 对C++字符串使用 std 转换
- 等价于元组的std::转换
- std::转换为任意容器
- std::转换顺序保证
- std::转换产生奇怪的输出