すべてのコンテナではないにしても、ほとんどのコンテナに::iterator
を入力して、LegacySomethingIterator
の代わりにSomethingIterator
を満たします。
例えば、 std::vector<>::iterator
現在必要 :
iterator
LegacyRandomAccessIterator
これは他のほとんどのコンテナでも同じようで、すべてのイテレータはSomethingIterator
からLegacySomethingIterator
に移動する必要があります。
RandomAccessIterator
など、古い要件の名前をとった「新しい」要件もありますが、なぜこれらが追加されたのですか?新しい亜種は、従来の亜種をシャドウするだけで、違いはないようです。
なぜ新しいものが最初に作成されたのか、それらの要件は私にとって同じように見えます。なぜ新しい要件は、現在2つの異なる名前(たとえば、RandomAccessIterator
とLegacyRandomAccessIterator
)を持っているのではなく、古い要件を単に置き換えないのですか?
これらは新しいものではないため、「レガシー」という用語です。これは、cppreferenceサイトが、C++ 20が「RandomAccessIterator」と呼ばれる「概念」である2つの異なるものを持っているという事実を調整するために選択する方法です。
C++ 20より前の「概念」は、特定のテンプレートパラメータに期待される動作を表す標準の要件のセットにすぎませんでした。 C++ 20では、概念が実際の言語機能になり、それを変える必要がありました。問題は、「concept
」の範囲RandomAccessIterator
が同じではないであり、「RandomAccessIterator」の古いスタイルの「概念」と同じであるということです。
C++はこれらを両方とも「概念」と見なしているため(言語の意味では新しい方だけがconcept
ですが)、Wikiでは同じページ名になります。そしてMediaWikiはそれを実際に許可していません。
そのため、サイトのメンテナーは「レガシー」を使用してそれらを区別することに決めました。実際の標準はこの「レガシー」プレフィックスを使用しないことに注意してください。
C++ 20標準には、古い概念の接頭辞「Cpp17」があることに注意してください。したがって、古いコンセプトは「Cpp17RandomAccessIterator」になります。それは明らかな理由でCppreferenceに適切とは見なされませんでした。