0

コードでログ レベルを定義したいと思います。

#define INFO 1
#define WARNING 2
#define ERROR 4
#define DEBUG 8

しかし、他の標準的な Microsoft ライブラリでは ERROR が既に定義されており、他の単語も予約されているようです。このような状況に対処するにはどうすればよいですか?

4

1 に答える 1

0

残念ながら、Microsoft は、ユーザーが好むと好まざるとにかかわらず、コードに挿入される多くのマクロを定義しています。したがって、エラーを繰り返さず、マクロの定義を避ける方がよいでしょう。

できる最善の方法は、マクロの代わりに定数を定義し、それらを名前空間内に配置して、名前の衝突を避けることです。例えば:

namespace Log
{
  const int Info = 1;
  const int Warning = 2;
  const int Error = 4;
  const int Debug = 8;
}

次に、コード内でそれらを として使用しLog::InfoますLog::Error

編集: Tinctorius がコメントで指摘しているようにenum、この場合はおそらく を使用する方がよいでしょう:

enum LogLevel
{
  Info = 1;
  Warning = 2;
  Error = 4;
  Debug = 8;
}

この場合、値の前にenum型名を付ける必要はありません。この型の変数を使用するだけです。例えば:

LogLevel level = Warning;

これには、型安全性を提供するという利点があります。他の の名前を再利用することもできますenum

于 2013-01-03T14:26:11.773 に答える