我想实现以下目标:
#include <iostream>
#include <fstream>
#include <string>
void write(std::ofstream& o)
{
o << "Some text..." << std::endl;
}
int main(const int argc, const char** argv)
{
if (argc == 2){
auto outputStream = std::ofstream(argv[1]);
write(outputStream);
}
else{
auto outputStream = std::ofstream(std::cout);
write();
}
}
Run Code Online (Sandbox Code Playgroud)
该代码无法编译,因为std::ofstream无法从构建std::cout。
一个可行的解决方案是rdbuf()在上下文中使用pointer_to_ofstream->basic_ios<char>::rdbuf(std::cout.rdbuf())(如本条目中所述)。
有更好的解决方案吗?
不要std::ofstream在中使用write。使用std::ostream。
void write(std::ostream& o)
{
o << "Some text..." << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
也,
auto outputStream = std::ofstream(std::cout);
write();
Run Code Online (Sandbox Code Playgroud)
是不正确的。随便使用。
write(std::cout);
Run Code Online (Sandbox Code Playgroud)
我也要更改第一个if。
if (argc == 2){
std::ofstream outputStream(argv[1]);
write(outputStream);
}
else{
write(std::cout);
}
Run Code Online (Sandbox Code Playgroud)