шаблоны проектирования — перечисления в стиле C # в Stack Overflow

Я пытаюсь написать библиотеку журналов, которая будет использовать внешний инструмент

я ищу удобный способ добавить строки ключей в выходной поток, чтобы помочь синтаксический анализ с помощью внешнего инструмента при минимальном влиянии на программиста с помощью библиотеки

Цель состоит в том, чтобы достичь чего-то вроде этого:

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 ++ элегантно.

1

Решение

Я думаю, что в 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";
}
5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector