我正在使用一个意思是这样使用的类:
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类)
答案 0 :(得分:8)
struct Output
{
static ostream& stream;
};
ostream& Output::stream = cout;
int main()
{
Output::stream << "hey";
}
在这里工作正常。
答案 1 :(得分:7)
将其存储为std::ostream*
。
有时人们将引用存储为成员。这很容易出错,因为无法重新分配引用,这会导致赋值运算符执行错误的操作。
答案 2 :(得分:4)
您应该存储std::ostream &
。