continuações assíncronas em c ++ 11 ou tentativa de semântica .then ()

O código abaixo é baseado emHerb Sutter idéias de uma implementação de uma continuação do tipo .then ().

  template<typename Fut, typename Work>
auto then(Fut f, Work w)->std::future<decltype(w(f.get()))>
  { return std::async([=] { w(f.get()); }); }

Isso seria usado comoauto next = then(f, [](int r) { go_and_use(r); }); ou similar.

Esta é uma boa idéia, mas, como está, não funcionará (os futuros são apenas móveis e não podem ser copiados). Eu gosto da idéia, pois é provável que apareça nas próximas versões do c ++, tanto quanto eu posso imaginar (embora como. Then () ou até mesmo esperar).

Antes de fazer os futuros compartilhados ou similares, eu me pergunto o que a comunidade de estouro de pilha pensaria dessa implementação especificamente com melhorias e sugestões (até futuros compartilhados)?

Agradecemos antecipadamente por qualquer sugestão.

(Eu estou ciente de que isso é uma correção até que um mecanismo baseado em padrões exista, pois custará um thread (talvez))).

questionAnswers(2)

yourAnswerToTheQuestion