現在、ログ ライブラリにいくつかの機能を追加しています。これらの 1 つは、そのクラス内から書き込まれるすべてのログ メッセージに自動的に付加されるクラスのモジュール名を宣言する可能性です。ただし、モジュール名が指定されていない場合は、先頭に何も追加されません。現在、名前を返す静的関数を持つ特性クラスを使用しています。
template< class T >
struct ModuleNameTrait {
static std::string Value() { return ""; }
};
template< >
struct ModuleNameTrait< Foo > {
static std::string Value() { return "Foo"; }
};
このクラスは、ヘルパー マクロを使用して定義できます。欠点は、モジュール名をクラスの外で宣言する必要があることです。クラス内でできるようにしてほしい。また、プリプロセッサ ディレクティブを使用してすべてのロギング コードを削除できるようにしたいと考えています。SFINAE を使用すると、テンプレート引数に特定のメンバーが含まれているかどうかを確認できますが、テンプレートに慣れていない他の人がコードを維持する必要があるため、より簡単なソリューションを探しています。何もない場合は、特性アプローチに固執します。
前もって感謝します!