我想创建一个用于记录目的的类,其行为与std::cout
类似,但会自动将其他信息插入到流中。超载<<运算符并将参数传递给std :: cout
,我想会是这样的一个样本使用(让现在不关心对象和上下文类型,只是假设它们的std :: string):
Logger l;
l << "Event with object : " << obj << " while in context : " << context;
那么输出将是:
[timestamp] Event with object : [obj_desc] while in context : [this context][eol][flush]
我一直在试图用:
template<typename T>
Logger& operator << (const T& msg){
std::cout << timestamp() << msg << std::endl << std::flush;
return *this;
}
但似乎std::cout
无法解析typename T
,并且无法在segfaulting时输出std :: string。
一个可能的解决办法是重载这对所有类型的,但是这是相当恼人的和耗时。
有更好的选择来装饰std::cout
输出更多的信息?
编辑:
我现在认识到,end1和冲洗将追加到每个消息哪一种失败的目的,但我仍然有兴趣的总体思路。我更关心追加任意数量的消息的单子语法,而不是<<
过载
'std :: endl'已经刷新了流。 – chris
请参阅:[std :: endl的重载处理?](http://stackoverflow.com/q/2212776/14065) –
请提供整个(精简但完整)代码以进行重现。那么,不要解释错误,而是引用它。很可能你正在使用临时或常量的Logger,或试图将一个像std :: endl这样的重载函数放入它中,但没有实际的代码和错误是不可能的。 –