作者:倾城不了倾了你 | 来源:互联网 | 2023-01-03 20:24
文档说明FILE
是标识流的对象类型.那么,是否可以将流对象与FILE
?相关联?
例如,我想std::cout
从stdout
FILE
指针或std::cerr
从stderr
等处获取对象.更一般地说,我想编写一个重定向给定流并将自定义设置streambuf
为它的函数,如下所示:
void redirect(FILE* file, std::ios stream) {
freopen_s((FILE**)file, "CONOUT$", "w", file);
stream.rdbuf(customBuffer);
}
用于重定向流
redirect(stdout, std::cout);
redirect(stderr, std::cerr);
有两个参数似乎是多余的,因为两个参数总是相互关联.
1> Serge Balles..:
C++标准库包括C标准库.A FILE
是C流,与C++ iostream完全不同.std::stream
实现可能依赖于底层FILE
,但标准并不要求这样做,即使在这种情况下也无法检索它.
可能的是构建一个std::streambuf
显式使用底层的自定义FILE *
,并在一个中使用它std::stream
.std::basic_streambuf
是C++标准库中为数不多的几个类之一,它被明确地设计为自定义派生的基类.不幸的是我找不到它的教程,但是这个类包含了一些你必须覆盖的虚拟方法.这不是一条简单的道路,但是如果你被卡在某个地方,可能会有一些工作,繁重的测试以及最终的SO帮助.但完全实施远远超出了答案.
TL/DR:没有底层std::stream
关联,FILE
但有一些工作你可以构建一个stream_buffer
将使用底层的自定义FILE *
.虽然那些是相当先进的操作......