ジェネレータをパラメータとして受け取る関数を作成したいと考えています。
次の点を考慮してください。
void function_which_takes_generator(type_i_dont_know view);
struct Pair {
int a, b;
}
int main() {
std::vector<Pair> pairs = //init to something
function_which_takes_generator(pairs | transform([]{auto pair} {
pair.x
}));
}
type_i_dont_know 型は何になりますか?このパターンを実装するより良い方法はありますか? co ルーチンを使用するにはどうすればよいでしょうか?
tutorialspoint.com/…
–
user12275552
2020 年 9 月 3 日 16:22
私'具体的にビューのタイプを取得する方法を尋ねています
– エドワード
2020 年 9 月 3 日 16:29
void function_that_takes_generator(std::ranges::view auto view) は、ビューのみを受け入れるように関数を制約します。
– メタルフォックス
2020 年 9 月 4 日 10:41
------------------------
関数ではなく関数テンプレートを作成します
template <typename View>
void function_which_takes_generator(View view)
{
// ...
}
呼び出しサイトで表示される、単なる宣言ではなく定義が必要であることに注意してください。
5
1
テンプレートを使用せずにこれを行う方法はありますか?
– エドワード
2020 年 9 月 3 日 16:29
この関数を複数回呼び出すつもりですか?式transform([]{auto pain} { /* anything here */ }) は一意の型です(たとえ「anything here」を繰り返したとしても)引用;)
– カレス
2020 年 9 月 3 日 16:30
はい - 実際の使用例は、さまざまな glm::vec3 型を処理し、それらに関する情報を集約できる基本クラスを作成することです。
– エドワード
2020 年 9 月 3 日 16:32
いいえ、テンプレートである必要があります。共通のスーパータイプはありません。
– カレス
2020 年 9 月 3 日 16:35
2
C++20 では、次のようなテンプレートを作成できます void function_that_takes_generator(auto view) {}
– シジエン
2020 年 9 月 3 日 16:41