使用OFSTREAM在每个值之间做一个终点是一件痛苦的事。 这是我所得到的一个例子:
ofstream fout("~/xample.txt");
fout << val1;
fout << endl;
fout << val2;
我希望能够做到,而不是
ofstream fout("xample.txt");
fout << val1;
fout << val2;
我不关心文件是如何存储的,因为无论如何我都会写一个配置向导。
答案 0 :(得分:2)
如果fout << val1 << endl;
无效,您可以继承ofstream并创建自己的流,自动添加endl
。但你也可以从消防栓中喝水。
答案 1 :(得分:1)
这是一种痛苦......
除此之外,你可以简单地写一下
fout << val1 << endl;
fout << val2 << endl;
您可以使用任何其他空白字符值来分隔输出文件中的值:
fout << val1 << ' ';
fout << val2 << ' ';
// ... more value outputs
fout << endl;
文件大小无关紧要,但肯定是行数。
<强>更新强>
当您询问如何扩展std::ostream
上的格式化行为时:
我认为使用std::streambuf
,std::ostream
等的继承并不是一个好主意,并尝试(重新)实现接口本身(通常不会继承STL的好主意)课程,虽然可以完成)。我想说的目的是使用流操作器来实现这一点。
要自动附加endl
或任何其他分隔符,您可以编写一个小参数化流操纵器(至少此解决方案是复制/粘贴和IDE intellisense友好):
template<typename T>
class auto_delim_manip
{
public:
auto_delim_manip(T value_, char delim_)
: value(value_)
, delim(delim_) {}
void put(std::ostream& os) const {
os << value << delim;
os.flush();
}
private:
T value;
char delim;
};
template<typename T>
auto_delim_manip<T> auto_delim(T value, char delim = '\n') {
return auto_delim_manip<T>(value,delim);
}
template<typename T>
std::ostream& operator<<(std::ostream& os, const auto_delim_manip<T>& autoDelim)
{
autoDelim.put(os);
return os;
}
int main() {
cout << auto_delim(5.2) << auto_delim(3) << auto_delim("Hello!");
return 0;
}
输出:
5.2
3
Hello!
答案 2 :(得分:1)
如果您有大量值,只需将'endl'与输出放在同一行,然后遍历所有数据。如:
for(int i = 0; i < numValues; ++i) {
fout << values[i] << endl;
}
我不知道有一种内置的自动化方法,但实际上手动添加行结尾并不是那么多。