C++ tink_core Future(haxe)表格c++;

C++ tink_core Future(haxe)表格c++;,c++,c++11,future,C++,C++11,Future,在haxe中有一个名为的库,它提供所谓的“” Future是一个尚未计算的值(例如异步操作的结果) 除此之外,我可以在未来做以下事情: 使用修改值的函数调用map,以使用修改后的值创建新的未来 先打电话给两个未来,创造一个新的未来,价值的未来首先完成 向未来添加回调,该回调将在值可用时调用 现在C++中有,但是我不知道上面描述的操作是可能的。 另外,似乎std::future只能使用std::async创建。但我想用自己的方式创建未来,而不需要函数回调 因此,我的问题是: 我是不是误判了s

在haxe中有一个名为的库,它提供所谓的“”

Future是一个尚未计算的值(例如异步操作的结果)

除此之外,我可以在未来做以下事情:

  • 使用修改值的函数调用map,以使用修改后的值创建新的未来
  • 先打电话给两个未来,创造一个新的未来,价值的未来首先完成
  • 向未来添加回调,该回调将在值可用时调用

现在C++中有,但是我不知道上面描述的操作是可能的。 另外,似乎std::future只能使用std::async创建。但我想用自己的方式创建未来,而不需要函数回调

因此,我的问题是:

  • 我是不是误判了std::未来,它能做到这一切
  • 在C++中有不同的未来库吗?我没有找到,可以做到这一点?
您的主要错误假设是只有
std::aysnc
创建了
std::future
。事实上,
std::promise
std::packaged_task
也做同样的事情

三个操作中的第一个(映射)相当简单。你基本上想要
G(F(x))
。这需要一个新的
packaged_任务
,该任务接受第一个未来,等待其结果,然后在
F(x)

第二次操作在标准C++中效率低下,因为没有有效的多等待。你必须对两个未来都进行投票。相比之下,Windows具有
WaitForMultipleObjects()


第三个基本上是第一个的变体,因为它基本上是
f=f(X);G(f);返回f
-调用
G
一次
f(X)
返回,但忽略
G
的返回值,并使用
f(X)
的原始返回值

我不是haskell专家,但Bartosz Milewski解决了他与haskell相比在std::future方面存在的一些问题。也许对你有帮助。