5

我正在使用一个打算像这样使用的类:

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 类)

4

3 回答 3

10
struct Output
{
    static ostream& stream;
};

ostream& Output::stream = cout;

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

在这里工作正常。

于 2011-02-22T17:53:48.490 回答
10

将其存储为std::ostream*.

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

于 2011-02-22T17:56:01.393 回答
5

你应该存储一个std::ostream &.

于 2011-02-22T17:52:46.787 回答