Я пытаюсь написать библиотеку журналов, которая будет использовать внешний инструмент
я ищу удобный способ добавить строки ключей в выходной поток, чтобы помочь синтаксический анализ с помощью внешнего инструмента при минимальном влиянии на программиста с помощью библиотеки
Цель состоит в том, чтобы достичь чего-то вроде этого:
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 # я мог бы использовать enum
для достижения поведения записи, как я могу реализовать это в C ++ элегантно.
Я думаю, что в 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";
}
Других решений пока нет …