問題タブ [std-ranges]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
665 参照

c++ - 再帰的な概念ベースの関数テンプレートを使用した「auto」の推定前の「auto [...]」の使用

深く編集された要素をdeep_flatten生成する関数テンプレートを作成したかったのです。たとえば、ネストされたsのみを考慮すると、次のようになります。rangejoinstd::vector

これにより、次のことが可能になります。

予想どおり、次のテキストがコンソールに出力されます。

しかし、私はこの解決策があまり好きではありません。非効率的であるだけでなく(多数の一時的なベクトルを作成する)、std::vectors でのみ機能します。の魔法をもう少し使用して、std::ranges::range概念を使用できると考えました。

これは非常に簡単に思えましたstd::ranges::range。ネストされた範囲であるかどうかに応じて、joined 要素を再帰するか、単に返します。

残念ながら、うまくいきません。実行しようとした後:

次のようなエラーが表示されます。

同様の問題を調査した結果、エラーがここに表示される理由がわかりません。

私は使っているgcc version 10.1.0 (Rev3, Built by MSYS2 project)

0 投票する
1 に答える
294 参照

c++ - What are the rules for creating your own (pipeable) ranges ::views and ::actions?

In this answer, we can see that we can create our own views. I have tried that:

and when I thought I have succeeded:

it turned out that I actually failed, because std::ranges::range<decltype(rng)> is false.

Trying to figure out why, I tried to take std::ranges::begin(rng), which resulted in a few dozen lines of errors, which, more or less, boiled down to:

which is weird, because I did provide member begin() and end() (unless __member_begin<_Tp> doesn't do what it looks like it's doing).

The full error message is as follows:

What exactly did I miss? How do I properly create my own <ranges> extensions?