パックされたシーケンシャル メモリ ストレージ (メモリ コピー用) を持つコンテナーを利用する関数のセットを開発しています。それらには、ほとんどの STD 関数のスタイルの関数シグネチャがあり、入力/出力反復子は要素を指し、範囲を示します。たとえば、関数は次のようになります。
template< typename InputIterator, typename OutputIterator >
OutputIterator fooBar( InputIterator& first, InputIterator& last,
OutputIterator& result );
渡されたイテレータが有効であること、つまりパックされ、シーケンシャルであることを確認したいと思います。STD コンテナーの場合、これは std::vector および std::array に限定されます。残念ながら、イテレータの「カテゴリ」特性に頼ることはできません。なぜなら、ランダム アクセス特性は順次ストレージを意味しないからです。この例は、Microsoft の concurrent_vector クラスであり、ここに文書化されています。並列コンテナー
さらに、ベクトル クラスと配列クラスのすべてのイテレータを受け入れることもできません<bool
。
上記の制約でイテレータを区別してフィルタリングするために、独自の特性クラスを作成しようとしましたが、テンプレートの構文の問題が発生しています。この問題にどのように取り組むかについて、他の人からのフィードバックを探しています。
ありがとう