我可以使用其他地方打开的
FILE* f = ...
初始化一些std::ostream
实例的事情?像这样(伪代码):
FILE *f = ...;
std::ostream os;
os./*bind_to_f*/( f ); // HOW?
os << "Hello world" << std::endl;
答案 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似乎有类似的类。