我可以使用FILE *来初始化C ++ ostream对象吗?

时间:2011-07-18 15:17:18

标签: c++ stream iostream

我可以使用其他地方打开的

FILE* f = ...

初始化一些std::ostream实例的事情?像这样(伪代码):

FILE *f = ...;
std::ostream os;
os./*bind_to_f*/( f );    // HOW?
os << "Hello world" << std::endl;

3 个答案:

答案 0 :(得分:3)

FILE*和流分别是C和C ++样式的I / O功能。由于C ++库并不总是知道底层C库的实现,因此无法做到这一点。另外考虑一下,如果你能做到这一点,所有权语义是什么?

答案 1 :(得分:2)

使用GCC,您只需将现有文件描述符传递给构造函数(ref):

FILE *f = ...;
std::ofstream os(fileno(f));
  

构造函数:ofstream :: ofstream(int fd)

     

使用文件描述符fd创建一个用于写入已经打开的文件的流。

答案 2 :(得分:2)

如果你要在内部创建一个使用FILE *的streambuf类,你可以这样做。例如,HP OpenVMS似乎有类似的类。