2

私はC++ 20の範囲ライブラリを調べています.関数から範囲アダプターを構築するのがどれほど簡単か疑問に思っていましたtemplate<Iterator I,Iterator J> I f(J). 私が念頭に置いていた特定の例は、s のストリームの同時評価ですstd::function<I()>。私が考えていた機能は次のようなものかもしれません:

// use std::async to concurrently evaluate up to 10 functions from the input iterator.
template<typename T, typename It>
generator<T> async_eval(It it) {
  std::queue<std::future<T>> queue;
  for (auto& i : it) {
     // Wait for a slot to free.
     while (queue.size() >= 10) {
       co_yield queue.front().get();
       queue.pop();
     }

     // Now there is space in the queue, we can safely push to it.
     queue.emplace(std::async(i));
  }

  // Empty the queue.
  while (queue.size() >= 0) {
    co_yield queue.front().get();
    queue.pop();
  }
}

それなら、と言えるようなas_adaptor関数が欲しい... | transform([](int x) { return [x](){return x+1};}) | as_adaptor(async_eval) | ...です。これ、または同様のことは可能ですか?

4

0 に答える 0