を使用して、コレクションからsを作成するヘルパー関数(コレクション要素ごとに1つの未来)を使用std::async
できるかどうか疑問に思いました。std::future
多くの場合、私は次の状況にあります。
auto func = []( decltype(collection)::reference value ) {
//Some async work
};
typedef std::result_of<decltype(func)>::type ResultType;
std::vector<std::future<ResultType>> futures;
futures.reserve(collection.size());
// Create all futures
for( auto& element : collection ) {
futures.push_back(std::async(func, element));
}
// Wait till futures are done
for( auto& future : futures ) {
future.wait();
}
これを簡単に再利用できるようにするために、次の部分的なコードを考え出しました。
template< class Function, class CT, class... Args>
std::vector<std::future<typename std::result_of<Function(Args...)>::type>>
async_all( Function&& f, CT& col ) {
typedef typename std::result_of<Function(Args...)>::type ResultType;
std::vector<std::future<ResultType>> futures;
futures.reserve(collection.size());
for( auto& element : collection ) {
futures.push_back(std::async(func, element));
}
}
return futures;
で、もう推論できないので、今私はArgs
問題を解決しなければなりません。私が現在考えることができるのは、コレクション内の要素をに変換する別のファンクターだけです。これに対するよりエレガントな解決策はありますか?async_all
Args
Args