特定の方法でログに表示したいクラスがあるため、その<<
演算子をオーバーロードしました。
class CWindowClassId
{
public:
// ...
friend std::wostream& operator<< (std::wostream& os, CWindowClassId const& classId);
}
上記のクラスをログ ストリームに挿入します。
// ...
CWindowClassId classId(hWindow);
BOOST_LOG_TRIVIAL(debug) << "Window created, class = " << classId;
コンパイルエラーが発生します:
Error 1 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const Sandbox::CWindowClassId' (or there is no acceptable conversion) C:\local\boost_1_55_0\boost\log\utility\formatting_ostream.hpp 710
<<
エラーは、ワイド文字列をオーバーロードしたという事実にあることを知っています。ostream
の代わりに使用する場合はすべて問題wostream
ありませんが、ワイド文字列バージョンを使用したいのです。
シンクのロケールを設定しようとしました:
shared_ptr<log::sinks::synchronous_sink<log::sinks::text_file_backend> > sink = log::add_file_log("log.txt");
sink->imbue(boost::locale::generator()("en_US.UTF-8"));
またBOOST_LOG_USE_WCHAR_T
、ログ関連のインクルードの前に定義しています。
ワイド文字列<<
演算子でロギングを機能させるためにできることはありますか?
Boost 1.55.0 を使用しています。