【问题标题】:How do I expose a library's enum, such that my code doesn't have to type out the entire namespace to use that enum?如何公开库的枚举,这样我的代码就不必输入整个命名空间来使用该枚举?
【发布时间】:2020-01-22 20:51:09
【问题描述】:

我正在使用一个名为 spdlog 的库进行日志记录。我想围绕库构建自己的 Logger,以便可以选择添加特定于我的应用程序的“额外”功能。

我能够让下面的代码正常工作:

#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 类,我是否必须期望使用我的 logger 的类在其日志记录函数调用中输入整个枚举的命名空间?

【问题讨论】:

    标签: c++ enums namespaces spdlog


    【解决方案1】:

    但如果我创建自己的 Logger 类,我将不得不期望使用我的 logger 的类在其日志记录函数调用中输入整个枚举的命名空间

    您可以在这里使用using。比如:

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

    这将防止您每次需要使用它时都输入整个内容。那么你只需要使用info。

    【讨论】:

      【解决方案2】:

      如果我创建自己的 Logger 类,我是否必须期望使用我的 logger 的类在其日志记录函数调用中输入整个枚举的命名空间?

      我建议您的类定义自己的 info 值,然后在需要时将其在内部映射到 spdlog 的 info 值。 spdlog 是您班级内部的实施细节,因此不要在班级之外公开 spdlog,如果可以提供帮助,请将其隐藏。如果您愿意,这还允许您在将来更换另一个记录器库,而不会破坏使用您的类的代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 2011-07-08
        • 2012-10-18
        • 2016-06-20
        • 1970-01-01
        • 2018-10-25
        • 2016-03-27
        相关资源
        最近更新 更多