【发布时间】:2013-07-21 16:22:48
【问题描述】:
我创建了自己的 std::cout 类对象,该对象同时写入 std::cout 和日志文件。
我目前在头文件中这样定义它,但我收到未使用的变量警告。
头文件<MyLib/Log.h>
static LOut { };
static LOut lo;
template<typename T> inline LOut& operator<<(LOut& mLOut, const T& mValue)
{
std::string str{toStr(mValue)};
std::cout << str;
getLogStream() << str;
return mLOut;
}
用法:
#include <MyLib/Log.h>
...
lo << "hello!" << std::endl;
lo 应该是static 吗? lo应该是extern吗?
感谢解释声明cout-like 对象的正确方法并展示主要标准库实现如何做到这一点。
编辑:cout-like 对象,我的意思是一个全局变量,在包含相应的标头后始终可用。
【问题讨论】:
-
std::cout通常只是某种std::ostream,具有一些特殊的逻辑来确保它足够早地初始化,并且永远不会被破坏;我知道至少有一个编译器使用特殊的扩展来实现这一点。但你通常不需要它;如果情况变得更糟,您可以使用单例,并写log() << ...。
标签: c++ c++11 static global-variables extern