注: より適切な回答を得るために回答に基づいて編集されました。
私は何年にもわたって作成した C++ テンプレートのコレクションを持っており、これを Joop と呼んでいます。これは主に、「汎用」カテゴリに分類されないライブラリで構成されていますが、私がそれらを別のプロジェクトに平手打ちし続けるのに十分有用であるため、それらのほとんどは Boost などの他のライブラリに同等のものはありません。
これらのクラスの 1 つがseqstream
. アイデアは、反復可能なシーケンスを通常の STL のようなストリームとして扱うことができるようにすることです。その「文字型」はシーケンスの値の型です。
このクラスの根拠は 2 つあります。まず、潜在的に非線形で不連続なシーケンスを線形かつ連続的に見せるインターフェイスを提示する必要があります。次に、ストリーム内のすべてのオブジェクトを、単一の複雑な大きな文字であるかのように扱う必要があります。ストリームをシーケンスとして扱う標準的な方法があります。
現在、seqstream
最初、最後、および現在の要素の 3 つの反復子をラップします。seqstream
標準ストリームにbasic_seqbuf
差し込めるに置き換えたい。std::basic_streambuf
この種の動作を提供するために拡張を開始するためのリソースを誰かが提供できますか?
さらに、writableseqbuf
が許可されている場合、オブジェクトを に書き込んでもオブジェクトがシリアライズされずseqbuf
、メソッドが適切に呼び出されるか、ユーザー指定の挿入反復子 ( など) が使用されます。insert()
std::back_insert_iterator
編集:
seqstream
が現在どのように使用されているかの例を次に示します。
// Create a sequence of objects.
std::vector<std::string> sequence;
for (int i = 0; i < 10; ++i) {
std::ostringstream stream;
stream << "Element " << i << ".";
sequence.push_back(stream.str());
}
// Create a seqstream wrapping that sequence.
joop::seqstream< std::vector<std::string> > seqstream(sequence.begin(), sequence.end());
// Read the sequence like a stream.
std::string element;
while (seqstream >> element) // OR seqstream.get(element)
std::cout << element << '\n';