C++ C++;17可恢复/等待:它也可以与boost::future一起使用吗?

C++ C++;17可恢复/等待:它也可以与boost::future一起使用吗?,c++,boost,c++17,C++,Boost,C++17,在C++17中,有一个美好的未来,就像C#的wait std::future<int> get_answer() { return std::async(std::launch::async, [] { return 42; }); } std::future<void> do_something() resumable { // ... int a = await get_answer(); // ... } 您链接的论文()明确指出,

在C++17中,有一个美好的未来,就像C#的
wait

std::future<int> get_answer()
{
    return std::async(std::launch::async, [] { return 42; });
}
std::future<void> do_something() resumable
{
    // ...
    int a = await get_answer();
    // ...
}
您链接的论文()明确指出,只有
std::future
std::shared\u future
被接受为
可恢复
函数的返回类型:

可恢复功能的返回类型必须为未来或共享未来 . 对T的限制是 由std::future定义,不是本提案,但T必须是可复制或可移动类型,或“void”。它也必须是 可以构造一个不带参数的T变量;也就是说,它必须有一个可访问(隐式)或 外植体 如果是类类型,则为默认构造函数

然而,提案的第4节(
泛化
)提议取消退货类型限制。返回的类型应为具有以下限制的任何类型:

一元运算符
await
的操作数可以是任何类型的
S
(“S最终持有一个T”),并满足以下条件:

  • S有一个无参数函数
    get
    ,该函数最终将生成类型为T的值,或引发异常
  • S有一个函数
    ,然后
    接受一个单参数函数对象,该函数对象接受一个参数
    S
    S&
    ,或
    常量S
    。一旦传递到
    然后
    ,该参数所持有的值必须立即可通过调用
    get
    进行检索
  • 或者,如果
    S
    有一个
    bool
    -返回函数
    已准备就绪()
    指示是否已保存值,则
    wait
    的实现可以更有效

  • 目前,讨论仍在进行中。如果通用化被接受,则
    可恢复
    函数将能够返回
    boost::future
    。否则,它将被限制在
    std::future
    std::shared\u future

    我认为这在C++14中不存在。C++14中没有等待或异步。什么?不是C++14吗?你不能对任何事情说“在C++17中”,因为没有一个草稿可以称为“C++17”。最新的草案是C++14,并且没有包含任何附加类的更新草案。。。因此,除了C++14中已有的内容外,“在C++17中”没有其他内容。这个问题似乎是离题的,因为它是关于猜测的。它属于论坛。这个答案已经过时了。
    boost::future<int> get_answer()
    {
        return boost::async(boost::launch::async, [] { return 42; });
    }
    boost::future<void> do_something() resumable
    {
        // ...
        int a = await get_answer();
        // ...
    }