2016-01-04 34 views
1

haxe中有一个名为tink core的库,它提供所谓的“Futures”。tink_core Future(haxe)form C++

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

在其他的事情,我可以做以下的事情与未来:

  • 调用地图与修改值的函数,与修改后的值
  • 调用首先有两个创建一个新的未来期货,创造未来价值第一的未来
  • 为未来添加回调,当价值可用时将调用回调。

现在在C++中有std::future,但我没有看到上述操作是可能的。

此外,似乎std :: future只能用std :: async创建。但我希望以自己的方式创造未来,而不需要回调函数。

所以我的问题:

  • 上午我误判的std ::未来,它可以做到这一切?
  • 在C++中是否有不同的未来库我还没有找到,可以做到这一点?
+0

我不是哈斯克尔专家,但Bartosz Milewski解决了他与std :: future相比哈斯克尔的一些问题。也许[this](http://bartoszmilewski.com/2014/02/26/c17-i-see-a-monad-in-your-future/)可以帮助你。 – mkaes

回答

1

您主要的错误假设是,只有std::aysnc创建了std::future。实际上,std::promisestd::packaged_task也是这样做的。

您的三个操作(映射)中的第一个操作非常简单。你基本上想要G(F(x))。这需要一个新的packaged_task这需要第一的将来,等待它的结果,然后调用函数G()F(x)

第二次行动是在标准C++效率低下因为没有有效的多的等待。你将不得不轮询两个期货。相比之下,Windows有WaitForMultipleObjects()

第三本质上是第一的变体,因为它基本上是f=F(X);G(f); return f - 拨打G一旦F(X)已经恢复,但忽视了G的返回值,并从F(X)使用原来的返回值。