64,676
社区成员
发帖
与我相关
我的任务
分享
template<typename StreamT, typename T>
inline StreamT &operator<<(StreamT &log, const T &val)
{
log.Print(val);
return log;
}
template<typename T>
void Print(const T &val)
{
Mutex mutex;
Out(...);
}
log << 1 << "2" << 3.0;
template<typename LogT>
class ThreadSafeAgent
{
typedef DataStructure::AutoSpinLock LockType;
LockType lock_;
LogT &log_;
public:
ThreadSafeAgent(LogT &log)
: log_(log)
{
lock_.Lock();
}
~ThreadSafeAgent()
{
lock_.Unlock();
}
public:
LogT &operator()()
{
return log_;
}
};
template<typename LogT>
inline ThreadSafeAgent<LogT> ThreadSafe(LogT &log)
{
return ThreadSafeAgent<LogT>(log);
}
template<typename LogT, typename T>
inline ThreadSafeAgent<LogT> &operator<<(ThreadSafeAgent<LogT> &log, const T &val)
{
log() << val;
return log;
}
ThreadSafe(multiLog)() << 12 << "34" << 5.6 << Endl;
#define LOG(expr) \
do \
{ \
log.lock(); \
log << expr; \
log.unlock(); \
} while (0)