現在、char* および var 引数を受け取り、それらを使用して printf を実行するロギング システムがあります。これは C スタイルの文字列でうまく機能しますが、もう少しすっきりしたものにしたいと思います。現在、std::stringstream を使用する場合、ロギング システムの外部で文字列ストリームを作成し、文字列ストリームによって指定された文字列に char* を使用する必要があります。次のようになります。
std::stringstream strStream;
strStream << "The value of x is: " << x;
logging::print( strStream.str().c_str() );
私が望むのは、パラメータを文字列ストリームで直接使用しているかのように関数に渡すことです。ユーザーの観点からは、次のようになります。
logging::printStream("The value of x is: " << x);
またはおそらく次のように:
logging::printStream("The value of x is: ", x);
ロギング システムの関数の外で文字列ストリームを作成しなくても、stringstream を使用できるようにロギングを使用する方法はありますか?
シッピング ビルドで関数パラメーターのいずれかがコンパイルされないようにするマクロを作成するつもりなので、これは特に重要です。その外部で文字列ストリームを作成して渡す必要がある場合、マクロは役に立ちません。技術的には、この質問で話している文字列ストリームのことを行うマクロを作成できますが、常にそうなるとは限らないため、それはかなり面倒ですこのロギングで文字列ストリームを使用するため、標準ロギング用のマクロと、標準ロギング用のマクロを呼び出す文字列ストリームを使用するための別のマクロがあります。