私は、非常に限られた (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 クラスの複数の実装) からのアイデアも見ましたが、これは複雑すぎて、私たちのニーズとリソースに対して重すぎると思います。
他のアイデアをいただければ幸いです。前もって感謝します!