我正在尝试编写一个返回未来的相当简单的方法。一个 lambda 设定了未来。这是一个最小的例子。实际上,lambda 可能会在不同的线程中调用,等等。
#include <future>
std::future<std::error_code> do_something() {
std::promise<std::error_code> p;
auto fut = p.get_future();
auto lambda = [p = std::move(p)] {
std::error_code error;
p.set_value(error);
};
lambda();
return std::move(fut);
}
int main() { return do_something().get().value(); }
出于某种原因,我收到类型错误。VSCode 智能感知 说:
没有重载函数的实例 "
std::promise<_Ty>::set_value [with _Ty=std::error_code]
" 匹配参数列表和对象(对象具有阻止匹配的类型限定符) -- 参数类型是: (std::remove_reference_t<std::error_code &>
) -- 对象类型是:const std::remove_reference_t<std::promise<std::error_code> &>
MSVC 编译器说:
错误 C2663:“ ”:2 个重载对“ ”指针
std::promise<std::error_code>::set_value
没有合法转换this
我真的不明白 VS Code 错误。是说它认为error
是一个const promise<error_code>
?如何正确调用lambda 捕获中的 dset_value
承诺?move