如果我使用:
int a = 3;
std::function<void()> task1 = std::bind([](int a){}, std::move(a));
这样做没问题,但如果我把int
替换成std::promise<int>
:
std::promise<int> p;
std::function<void()> task2 = std::bind([](std::promise<int> p){}, std::move(p));
G++ 抛出了一个错误:
error: conversion from ‘std::_Bind_helper<false, main()::__lambda7, std::promise<int> >::type {aka std::_Bind<main()::__lambda7(std::promise<int>)>}’ to non-scalar type ‘std::function<void()>’ requested
std::function<void()> task2 = std::bind([](std::promise<int> p){}, std::move(p));
为什么绑定
std::promise
参数有问题?
std::function
需要一个可复制的类型。我会使用std::shared_ptr
代替。非常感谢! - Xiaojie Chen