我有一个Logger
带有公共方法的静态 C++ 类:
static std::ostringstream& Log(int sev);
如您所见,该方法评估为 ostringstream,因此我只需键入以下内容即可记录我的内容:
Logger::log(MY_SEVERITY) << "hello world";
由于编译器首先评估 log(MY_SEVERITY),然后评估整个表达式,我需要第二种方法:
static FVResult_t Flush();
将 ostringstream 的内容实际写入磁盘。Flush() 必须在任何 Log() 调用之前调用,所以每当我想记录一些东西时,我必须依次调用这两种方法:
Logger::log(MY_SEVERITY) << "hello world";
Logger::Flush();
到目前为止,一切都很好。
现在我的问题是,我想编写一个 C++ 宏,它结合了两种方法,让我可以做这样的事情:
LOGMACRO(MY_SEVERITY) << "hello world";
我试过:
#define LOGMACRO(lev) \
Logger::Log(lev) \
Logger::Flush();
然而,正如我所料,C++ 编译器抱怨缺少 ostringstream。如何仅在我的宏中将此类 ostringstream 传递给 Logger::Log(lev)?