#include <future>
// using std::future, std::async, std::launch
#include <algorithm>
// using std::transform, std::for_each
#include <iterator>
// using std::back_inserter
#include <functional>
// using std::mem_fn
#include <vector>
// using std::vector
#include <string>
// using std::string
#include <iostream>
// using std::cout, std::endl
namespace {
std::string operation(const std::string& input)
{
return input + " bar";
}
}
int main()
{
std::vector<std::string> inputs(10, std::string("foo"));
// fork
std::vector<std::future<std::string> > futures;
auto start_async = [](const std::string& input) {
return std::async(std::launch::async, operation, input);
};
std::transform(inputs.cbegin(), inputs.cend(), std::back_inserter(futures),
start_async);
// join
std::vector<std::string> results;
std::transform(futures.begin(), futures.end(), std::back_inserter(results),
std::mem_fn(&std::future<std::string>::get));
// demo output
auto print_result = [](const std::string& output) {
std::cout << output << std::endl;
};
std::for_each(results.cbegin(), results.cend(), print_result);
return 0;
}
Comments