3

「snap」という名前のライブラリを作成し、サブ名前空間に配置する「log」という名前のクラスが必要です。名前空間も「ログ」でも大丈夫ですか?(私はそれが技術的に機能することを知っています、私は適切な命名規則について疑問に思っています、あなたはどうしますか?)

namespace snap
{
  namespace log
  {
    class log {
      ...
      enum log_level_t { ..., LOG_LEVEL_ERROR, ... };
      ...
    };
  }
}

問題は、次のような結果になることです。

snap::log::log::log_level_t ll(snap::log::log::LOG_LEVEL_ERROR);

それはあなたにとって奇妙に見えますか?(つまり、double :: log :: log)

4

1 に答える 1

3

クラス内で列挙型を定義した理由がわかりません。名前空間をロギング専用にしている場合は、ロギングに関連するすべてのものを名前空間に定義します。だから私は代わりにこれを好むだろう:

namespace snap
{
  namespace log
  {
     enum log_level_t { ..., LOG_LEVEL_ERROR, ... };
     class log { };
  }
}

さらに、名前空間log自体は、その中で定義されている、ログに関連する (またはログに関連する必要がある) ものを意味するため、の部分が繰り返しのように感じlogますlog_level_t。上記をさらにリファクタリングして、次のようにします。

namespace snap
{
  namespace logging //renamed
  {
     enum class level_t{verbose, info, error, ... }; //renamed, and used enum class!

     class logger { ... }; //renamed
  }
}

severityまたは、の代わりに名前を選択するかもしれませんlevel_t。とにかく、私の意見では、使用法は少し良くなります。

logger.write(snap::logging::severity::error, message, etc);

または、次のように記述できるように、わかりやすい関数を記述することもできます。

logger.verbose(message, etc);
logger.info(message, etc);
logger.error(message, etc);
//etc

それが役立つことを願っています。

于 2013-02-02T05:59:16.583 に答える