1

我正在尝试编写一个使用外部工具的日志库

我正在寻找一种方便的方法来将键字符串添加到输出流中,以帮助外部工具进行解析,同时对使用库的程序员的影响最小

目标是实现这样的目标:

cout << DEBUG::VERBOSE << "A should equal 3" << endl;
cout << DEBUG::WARNING << "something went wrong" << endl;

现在我的数据结构如下

struct Debug
{
static const std::string FATAL_ERROR; 
static const std::string ERROR;
static const std::string WARNING;
static const std::string IMPORTANT;
static const std::string INFORMATION;
static const std::string VERBOSE;
static const std::string DEBUG;
};

这有效,但我想从std::string类型中添加一个抽象级别。

在 Java/C# 中,我可以使用 anenum来实现写入行为,如何在 C++ 中优雅地实现它。

4

1 回答 1

5

我认为在 C++ iostreams 中,风格的流操纵器endl更惯用:

#include <iostream>

namespace debug
{
    std::ostream & info(std::ostream & os) { return os << "Info: "; }
    std::ostream & warn(std::ostream & os) { return os << "Warning: "; }
    std::ostream & error(std::ostream & os) { return os << "Error: "; }
}

int main()
{
    std::cout << debug::info << "This is main()\n"
              << debug::error << "Everything is broken\n";
}
于 2013-04-09T00:39:50.340 回答