ロギング用の汎用クラスを作成しています
- ログに記録する文字列でファンクターとして呼び出すことができます
- いくつかの情報(システム時間、ログレベルなど)で文字列を充実させます
- << 演算子を実装する出力クラスにログ メッセージを渡します。この「出力チャネル」は、構築時に定義できます。
コード:
template<class Writer>
class Logger
{
public:
Logger(Writer* writer);
~Logger(void);
void operator() (char level, std::string message);
private:
Writer* writer;
};
template<class Writer>
Logger<Writer>::Logger(Writer* writer)
: writer(writer)
{
}
template<class Writer>
Logger<Writer>::~Logger(void)
{
}
template<class Writer>
void Logger<Writer>::operator ()(char level, std::string message) {
/* do something fancy with the message */
/* ... */
/* then write to output channel */
this->writer << message;
}
ただし、コンパイル時に「テンプレート引数を推定できませんでした」というエラーが表示されます。エラーが発生する行は
this->writer << message;
私は C++ テンプレートにはかなり慣れていません。むしろ、力の C# 側から来ています...何か提案はありますか?
前もって感謝します...