gpt4 book ai didi

c++ - C++ 中的 WriteLog( ... ) 函数

转载 作者:行者123 更新时间:2023-11-30 03:09:54 25 4
gpt4 key购买 nike

我正试图找到一种从 C++ 进行日志记录的合适方法。我目前的解决方案是这样的:

ostream & GetLog() { if( output == NULL ) throw error; return *output; }

输出在某处定义,可以是文件或其他任何东西。这很好,但如果未分配输出,它只会让我做任何事情,除了抛出错误。另外,我的程序是多线程的,我需要获得一个锁才能正确检查输出是否不为 NULL,如果不是,则写入它。理想情况下,任何使用 GetLog() 的代码都应该获得该锁:

{
LockLog lock;
if( HasLog() )
GetLog() << "My dog ate " << n << " cookies!" << endl;
}

我觉得这太冗长了。我想做一些事情

GetLog() << "My dog ate " << n << " cookies!" << endl;

并在日志未分配(并带有锁)或类似函数时使其正常工作

WriteLog( "My dog ate " << n << " cookies!" << endl );

我知道用 C printf 语法这可以用可变参数函数来完成。有没有一种方法可以使用 C++ 语法执行此操作,而无需强制我公开 GetLog、HasLog 和 LockLog 函数的宏?

最佳答案

像这样吗?

class Log {
class buffer {
buffer(...);
~buffer() {
Lock lock(mutex);
// write in destrcutor
}
string data;
Mutex &mutex;
};
Mutex mutex;
...
};

template<class T>
Log::buffer operator<<(Log& l, T t) {
return t;
}

template<class T>
Log::buffer& operator<<(Log::buffer& b, T t) {
return b += t;
}

Log log;

log << "blah" << 6;

关于c++ - C++ 中的 WriteLog( ... ) 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3689849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com