如何将对`std :: cout`的引用存储为类成员

时间:2011-02-22 17:47:06

标签: c++ cout

我正在使用一个意思是这样使用的类:

Output() << "Hello.\n";

operator<<我明确地使用std::cout,但是我希望有一个静态类成员解析为`std :: cout'所以我可以做这样的事情:

copy(some_string_set.begin(), some_string_set.end(), ostream_iterator<string>(Output::m_stream, ", "));

或类似的东西(在修复静态数据成员之前,我无法修复底线。

我甚至试过auto,但GCC扔了一个

  

错误:'std :: cout'不能出现在常量表达式

对我说。我怎么能做我想做的事? (关键是不必在我的代码中使用std::cout,而是让所有输出都通过Output类)

3 个答案:

答案 0 :(得分:8)

struct Output
{
    static ostream& stream;
};

ostream& Output::stream = cout;

int main()
{
    Output::stream << "hey";
}

在这里工作正常。

答案 1 :(得分:7)

将其存储为std::ostream*

有时人们将引用存储为成员。这很容易出错,因为无法重新分配引用,这会导致赋值运算符执行错误的操作。

答案 2 :(得分:4)

您应该存储std::ostream &