c++ - 如何传递 ostream 对象?

标签 c++ cout ofstream ostream ampersand

我有一个这样的结构

struct X{
    ostream out;
    X() : out(cout) {}
    ...
};

我注意到我必须用 & 定义 out 才能正确地将 cout 作为默认参数传递:ostream &out;我不知道为什么,我也不知道是否还有其他可能性在没有 & 的情况下保留 ostream。此外,当我尝试设置

X x;
ofstream out;
x.out = out;

编译器发现了很多错误...我希望能够将 X::out 设置为 cout 或一个 ofstream。怎么做?

最佳答案

您可能做的最好的事情就是更改您的类设计,这样您就不需要再初始化成员变量了。编译器会阻止复制,基于指针的解决方案会引入所有权问题,std::shared_ptr 会给 std::cout 带来麻烦,引用成员会带来这种可能性悬空引用。

尝试重构您的代码,以便在需要时始终将流作为对外部方法的引用传递:

struct X{
    X() {}
    void f(std::ostream &os);
};

关于c++ - 如何传递 ostream 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23970613/

相关文章:

c++ - 错误 : binary '<<' : no operator found which takes a right-hand operand of type 'std::string'

C++源码帮助,cout函数帮助

c++ - 优化 .txt 文件创建速度

c++ - 'CREATE' 附近偏移量 8 处的 RedisGraph 语法错误

c++ - 在 `return 0` 末尾设置 `main` 可选的理由是什么?

c++ - C++ 中的 "X does not name a type"错误

c++ - 尝试将 ofstream 传递给对象时出错 (C++)

c++ - 任何用于 Johansen 协整检验的 C++ 库?

c++ - 阅读 double 和单词,并根据阅读的内容执行 Action

c++ - 在 C++ ofstream 上调用 fallocate()