Как открыть перечисление библиотеки, чтобы моему коду не нужно было печатать все пространство имен, чтобы использовать это перечисление? - PullRequest
2 голосов
/ 22 января 2020

Я использую библиотеку spdlog для ведения журнала. Я хотел бы построить свой собственный Logger вокруг библиотеки, чтобы у меня была возможность добавить «дополнительную» функциональность, которая задает c для моего приложения.

Мне удалось получить следующий работающий код:

#include <spdlog/spdlog.h>

int main()
{
  spdlog::log(spdlog::level::level_enum::info, "this is an info message");
  return 0;
}

Как видите, уровни ведения журналов доступны через перечисление с пространством имен в spdlog::level::level_enum.

. Возможно, это будет слишком сложно, но если я создам свой собственный класс Logger, у меня будет ожидать, что классы, использующие мой логгер, будут печатать все пространство имен перечисления в своих вызовах функций регистрации?

Ответы [ 2 ]

8 голосов
/ 22 января 2020

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

Здесь вы можете использовать using. Что-то вроде:

using info = spdlog::level::level_enum::info;

, что мешало бы набирать текст целиком каждый раз, когда вам нужно его использовать. Все, что вам нужно - это info.

0 голосов
/ 23 января 2020

если я создам свой собственный класс Logger, придется ли ожидать, что классы, использующие мой регистратор, будут печатать все пространство имен enum в своих вызовах функций регистрации?

Я бы порекомендовал определить ваш класс его собственное значение info, а затем сопоставление его внутреннему значению info в spdlog при необходимости. spdlog - это подробность реализации внутренних компонентов вашего класса, поэтому не открывайте spdlog вне вашего класса, держите его скрытым, если можете помочь. Это также позволяет вам в будущем поменять другую библиотеку логгеров, если вы решите, не нарушая код, который использует ваш класс.

...