3

解析或迭代的最佳方法是istream什么?我需要创建一个函数,它接受一个istream,解析它并创建一个对象,所以想知道最简单的方法来做到这一点。即使可以将其转换string为花花公子的东西。

4

2 回答 2

6

您可以使用istream_iterator.

typedef std::istream_iterator<std::string> streamiter;
for (streamiter it = streamiter(some_istream); it != streamiter(); it++) {
    // process words
}

这将在所有空格处拆分输入流。

于 2010-10-24T12:02:50.090 回答
1

由于 C++ 没有内置反射和持久性,因此您无法编写一个读取任何对象然后查看它的功能的函数。您需要事先知道您要查找的内容并具体阅读。(当然,您总是可以只读取标记并将其输入解析器。)

如果您确切知道要从流中读取哪种类型的对象,通常最好为该类提供一个构造函数,该构造函数采用std::istream&. 由于通常类也是要写入流的代码所在的位置,因此这会将它们放在一起,这对维护是最好的。然后解析代码只创建将流传递给构造函数的对象。

如果你不知道你会遇到哪种类型,你将不得不编写一个(可能很简单的)解析函数。这种格式应该以一个标识符开始,该标识符告诉后面是哪种类型的对象。您的解析函数首先必须读取该标识符,然后分支到从流中读取适当类型的代码。由于此时它知道要从流中读取什么类型的对象,因此可以如上所述在构造函数中实现读取实际对象。

于 2010-10-24T12:10:07.433 回答