我的代码
std::ostream a = std::cout;
引发以下错误:
"std::basic_ostream<_CharT, _Traits> ::basic_ostream(const std::basic_ostream<_CharT, _Traits> &) [with _CharT=char, _Traits=std::char_traits<char>]" (declared at line 404 of "/usr/include/c++/11/ostream") is inaccessible
如何将其更改为std::ostream& a = std::cout;
?
您不能重新分配整个流,但可以使用rdbuf()
交换底层缓冲区
#include <sstream>
#include <iostream>
std::ostringstream alternative; // get an alternative stream
std::streambuf* original = std::cout.rdbuf(); // remember the original cout buffer
std::cout.rdbuf(alternative.rdbuf()); // replace cout buffer with string buffer
doSomething();
std::cout.rdbuf(original); // restore original buffer
在线试用[Godbolt]
如果我查看了我的水晶球,我想你可能试图引用一个ostream,它可能是std::cout
,也可能是一个实际的文件ofstream
对象。在这种情况下,您可以在做出决策时使用指针作为中介。
int main(){
// default is std::cout
std::ostream* os = &std::cout;
if(do_i_want_os_as_a_file){
// mind the lifetime of this object if you care.
os = new std::ofstream(FILENAME);
}
std::ostream& out = *os;
// your outputs are now
out << "Hello theren";
}
我认为这比交换底层缓冲区更整洁/更清晰。