問題タブ [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.
c++ - 再帰的な概念ベースの関数テンプレートを使用した「auto」の推定前の「auto [...]」の使用
深く編集された要素をdeep_flatten
生成する関数テンプレートを作成したかったのです。たとえば、ネストされたsのみを考慮すると、次のようになります。range
join
std::vector
これにより、次のことが可能になります。
予想どおり、次のテキストがコンソールに出力されます。
しかし、私はこの解決策があまり好きではありません。非効率的であるだけでなく(多数の一時的なベクトルを作成する)、std::vector
s でのみ機能します。私は、 C ++ 20の魔法をもう少し使用して、std::ranges::range
概念を使用できると考えました。
これは非常に簡単に思えましたstd::ranges::range
。ネストされた範囲であるかどうかに応じて、join
ed 要素を再帰するか、単に返します。
残念ながら、うまくいきません。実行しようとした後:
次のようなエラーが表示されます。
同様の問題を調査した結果、エラーがここに表示される理由がわかりません。
私は使っているgcc version 10.1.0 (Rev3, Built by MSYS2 project)
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?