【发布时间】:2010-03-24 10:52:34
【问题描述】:
我有一个函数void write<typename T>(const T&),它是根据将T 对象写入ostream 来实现的,还有一个匹配函数T read<typename T>(),它从istream 中读取一个T。我基本上使用 iostreams 作为纯文本序列化格式,这显然适用于大多数内置类型,尽管我还不确定如何有效地处理 std::strings。
我也希望能够写出一系列对象,例如void write<typename T>(const std::vector<T>&) 或基于迭代器的等价物(尽管在实践中,它总是与向量一起使用)。然而,虽然编写一个迭代元素并将它们写出的重载很容易做到,但这并没有添加足够的信息来允许匹配的读取操作知道每个元素是如何分隔的,这与我本质上是相同的问题有一个 std::string。
是否有一种方法可以适用于所有基本类型和 std::string?或者也许我可以摆脱 2 个重载,一个用于数字类型,一个用于字符串? (可能使用不同的分隔符或使用分隔符转义机制的字符串。)
编辑:我很欣赏当面对这样的问题时通常明智的倾向是说“你不想那样做”并提出更好的方法,但我真的很喜欢直接相关的建议我问什么,而不是你认为我应该问什么。 :)
【问题讨论】:
标签: c++ templates standard-library iostream