gpt4 book ai didi

c++ - 在 C++ 中自定义日志记录的方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:00 28 4
gpt4 key购买 nike

我正在重构我的 C++ 应用程序。在我使用像这样的宏之前

LOG("something interesting") // 1
LOG("something ended") // 2
LOG("foo: " << bar) // 3

我现在的想法是像这样编写一个 Log 类:

Log(std::string _init_message):
init_message(_init_message)
{ PrintLogLine(init_message + " ...");}
~Log()
{ PrintLogLine(init_message + " done.");}

当我像这样使用它时,获取特定操作的“自动”记录(即它们何时开始、停止+另外计时等)

void ActionXYZ() {
Log log("xyz");
// do stuff
}

我正在努力的地方是定义一种方法使其适用于案例 3)。在 Java 中,我可以使用一种采用一个 String 参数的方法,因为编译器负责自动构建字符串。我在 C++ 中有哪些可能性?

我能否让它发挥作用,以便我可以像其中任一选项一样使用它?

 // in "do stuff"
log("foo:" + bar); // OR
log << "foo:" << bar;

最佳答案

正如我在评论中提到的,您可以使用 Boost.Format。它还有助于解决 int-to-string 转换等问题。不过,它可能会有点冗长 — 避免调用 .str() 来调用 std::string 构造函数,您可以制作一个直接接受 boost::format 的构造函数。

Log log(boost::format("foo %1% bar") % 42); // with Log(boost::format)
Log log((boost::format("foo %1% bar") % 42).str()); // with only Log(std::string)

引用Boost.Format documentation了解详情。

关于c++ - 在 C++ 中自定义日志记录的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6834119/

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