0

私は、非常に限られた (RAM メモリに関して) マイクロコントローラーを使用して、何人かの友人とプロジェクトを進めています。私の現在のタスクは、ロガー モジュールを作成することです。ロガーは、「x;y;log-message」のような形式を示す必要があります。ここで、「x」はログ レベル、「y」はクラス識別子 (一意の整数) です。これまでのところ、設計はほぼ完了しましたが、ロガー モジュールから依存関係なしで一意のクラス ID を取得する方法にまだ問題があります (どういうわけか)。

私の最初のアイデアは次のとおりです(これが疑似コードであるとしましょう):

class A : public Logger
{
private:
   unsigned short GetId () {return CLASS_ID_A;}
};

class Logger
{
public:
   enum
   {
      CLASS_ID_A, CLASS_ID_B
   };

   void Error (const char *msg, ...)
   {
      Log(LOG_LEVEL_ERROR, GetId(), msg, ...);
   }

protected:
   unsigned short GetId () = 0;
};

ログを記録する必要があるすべてのクラスが Logger クラスから継承する必要があるのは好きではありません。log4cpp (Category クラスの複数の実装) からのアイデアも見ましたが、これは複雑すぎて、私たちのニーズとリソースに対して重すぎると思います。

他のアイデアをいただければ幸いです。前もって感謝します!

4

1 に答える 1

0

簡単な方法は、Logger クラスに静的な Log メソッドを作成し、それを使用することです。

Logger::Log(LOG_LEVEL_ERROR, ...);
于 2013-05-07T05:50:17.947 に答える