を解析または反復する最良の方法は何istream
ですか? istream
を受け取り、それを解析してオブジェクトを作成する関数を作成する必要があるため、これを行う最も簡単な方法を考えていました。それを変換できるものでもstring
ダンディになります。
2 に答える
を使用できますistream_iterator
。
typedef std::istream_iterator<std::string> streamiter;
for (streamiter it = streamiter(some_istream); it != streamiter(); it++) {
// process words
}
これにより、すべての空白で入力ストリームが分割されます。
C++ にはリフレクションと永続性が組み込まれていないため、任意のオブジェクトを読み取る関数を記述して、その結果を確認することはできません。探しているものを事前に知り、それを具体的に読む必要があります。(もちろん、いつでもトークンを読み取ってパーサーにフィードすることもできます。)
ストリームから読み取るオブジェクトのタイプが正確にわかっている場合は、そのクラスにstd::istream&
. 通常、クラスはストリームに書き込むコードがある場所でもあるため、これにより両方が近くに配置され、メンテナンスに最適です。解析コードは、ストリームをコンストラクターに渡すオブジェクトを作成するだけです。
どのタイプに遭遇するかわからない場合は、(おそらく単純な) 解析関数を作成する必要があります。このような形式は、どのタイプのオブジェクトが続くかを示す識別子で開始する必要があります。解析関数は、最初にその識別子を読み取ってから、ストリームから適切な型を読み取るコードに分岐する必要があります。この時点で、ストリームから読み取るオブジェクトのタイプがわかっているため、実際のオブジェクトの読み取りは、上記のようにコンストラクターで実装できます。