如何使用std :: cout或std :: ofstream作为单个函数的输入?

Nes*_*tor 0 c++

我想实现以下目标:

#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())(如条目中所述)。

有更好的解决方案吗?

R S*_*ahu 5

不要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)

  • @Nestor请将问题保留为原始状态。如果对答案问题进行更改(如果更改了问题的含义),则可能会使将来的读者感到困惑。您可以编辑问题,但请确保这样做不会使答案无效。 (3认同)