gpt4 book ai didi

C++ 宏和 std::stringstream

转载 作者:行者123 更新时间:2023-11-30 01:59:40 25 4
gpt4 key购买 nike

我有一个带有公共(public)方法的静态 C++ 类 Logger:

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)?

最佳答案

你只能使用下面的宏

#define LOGMACRO(lev, msg) \
Logger::Log(lev) << msg; \
Logger::Flush();

像这样使用

LOGMACRO(MY_SEVERITY, "hello world")

不过,我认为,那个函数,或者手动使用 std::endl,或者使用你自己的操纵器会更好。

函数可以这样

inline void log(int severity, const std::string& msg)
{
Logger::Log(severity) << msg;
Logger::Flush();
}

然后

log(MY_SEVERITY, "Hello!");

关于C++ 宏和 std::stringstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15966391/

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