Logger
public メソッドを持つ静的 C++ クラスがあります。
static std::ostringstream& Log(int sev);
ご覧のとおり、メソッドは ostringstream として評価されるため、次のように入力するだけでログを記録できます。
Logger::log(MY_SEVERITY) << "hello world";
コンパイラは最初に log(MY_SEVERITY) を評価し、次に式全体を評価するため、2 番目の方法が必要です。
static FVResult_t Flush();
実際に ostringstream の内容をディスクに書き込みます。Flush() は Log() 呼び出しの直前に呼び出す必要があるため、何かをログに記録したいときはいつでも、2 つのメソッドを順番に呼び出す必要があります。
Logger::log(MY_SEVERITY) << "hello world";
Logger::Flush();
ここまでは順調ですね。
私の質問は、次のようなことを可能にする 2 つのメソッドを組み込んだ C++ マクロを書きたいということです。
LOGMACRO(MY_SEVERITY) << "hello world";
私は試しました:
#define LOGMACRO(lev) \
Logger::Log(lev) \
Logger::Flush();
ただし、予想どおり、C++ コンパイラは ostringstream の欠落について不平を言います。このような ostringstream をマクロでのみ Logger::Log(lev) に渡す方法は?