c++ 17 resume /await:它也可以与boost::future一起使用吗?
C++17 resumable/await : Can it also be used with boost::future?
在c++ 17中,有一个像c#的await
那样美好的未来。
std::future<int> get_answer()
{
return std::async(std::launch::async, [] { return 42; });
}
std::future<void> do_something() resumable
{
// ...
int a = await get_answer();
// ...
}
但我想知道boost::future
是否也可以使用:
boost::future<int> get_answer()
{
return boost::async(boost::launch::async, [] { return 42; });
}
boost::future<void> do_something() resumable
{
// ...
int a = await get_answer();
// ...
}
您链接的论文(N3722)明确指出,只有std::future<T>
和std::shared_future<T>
被接受为resumable
函数的返回类型:
可恢复函数的返回类型必须是future或shared_future。对T的限制是由std::future定义,而不是这个建议,但T必须是可复制或可移动的类型,否则为' void '。"一定也是可以构造一个没有参数的T的变量;也就是说,它必须具有可访问的(隐式的)或explic如果它是类类型,则为默认构造函数。
然而,提案(Generalization
)的第4节建议取消返回类型限制。返回类型应该是具有以下限制的任何类型:
一元操作符
await
的操作数可以是任意类型S<<T>>
(" S最终持有一个T "),并且满足以下条件:
- S有一个无参数函数
get
,它要么最终产生T类型的值,要么抛出异常。- S有一个函数
then
,它接受一个参数为S<<T>>
、S<<T>>&
或const S<<T>>
的单参数函数对象。一旦传递给then
,参数所持有的值必须立即可用于调用get
来检索。- 可选的,如果
S<<T>>
有一个bool
-返回函数is_ready()
指示一个值是否已经被持有,await
的实现可以更有效。
目前,讨论仍在进行中。如果泛化被接受,则resumable
函数将能够返回boost::future
。否则,将仅限于std::future
和std::shared_future
。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 架构决策:返回std::future还是提供回调
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 使用用户定义的参数调用future/async并调用类方法
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 有没有办法将std::async与std::experimental::future一起使用?
- c++ 17 resume /await:它也可以与boost::future一起使用吗?