【发布时间】:2019-09-02 16:59:00
【问题描述】:
我正在尝试使用 ostream 对象写入基于字符串流的用户输入文件流(类似于 Linux 中的 fmemopen)。
我意识到 ostream 不采用 stringstream 或 fstream 对象,而是采用 stringbug 或 filebuf。
我尝试了以下代码:
char content[] = "This is a test";
if (isFile)
{
filebuf fp;
fp.open(filename, ios::out);
ostream os(&fp);
os << content;
fp.close();
}
else
{
stringbuf str;
ostream os(&str);
os << content;
}
这在 if else 条件下工作正常,但我想在 if else 条件之外使用ostream os,作为os << content。但是问题是我无法全局定义 ostream os,因为 ostream 没有这样的构造函数。
有没有办法解决这个问题?
【问题讨论】:
-
将数据的写入与输出机制的设置分开。编写一个将数据插入流的函数。该函数应该通过引用获取
std::ostream并将数据写入那里。调用函数时,请根据需要传递std::ofstream或std::ostringstream。 -
这是我可以使用的。有没有办法默认初始化
insertdata(ostream& os)说insertdata(ostream& os = ofstream("temp.txt",ios::out)?这给了我一个错误。如果我创建const ostream& os,它会起作用,但是 os.write 会引发编译错误。 -
@Trancey 非常量引用无法绑定到临时对象。此外,这不是使用默认值有意义的场景。调用者需要指定函数应该写入的流类型。
标签: c++ fstream stringbuffer sstream filebuf