UnicodeStringとboost::formatとの連係

UnicodeStringでこんなこと出来るんだ。

//---------------------------------------------------------------------------
#include <iostream>
#include <vcl.h>
#pragma hdrstop

#include <tchar.h>
//---------------------------------------------------------------------------

#include "boost/format.hpp"

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
  UnicodeString us("あいうえお");

  // boost::format
  UnicodeString us3;
  us3 = boost::str(boost::wformat(boost::wformat(L"[%3.3s][%5.5s][%8.3f]") % us % "11111" % 2.134)).c_str();

  ShowMessage(us3);

  return 0;
}

boost::formatの引数にUnicodeStringをそのまま渡すことが出来たりする。"#include "がうまくいく原因っぽい。*1boost::formatはストリームIOを使って実装しているからかな?W8072が発生するけどうまく動いている。

あと、std::wcoutに出力する場合、プログラムの最初で

std::wcout.imbue(std::locale("japanese"));

が必要。

*1:コメントにすると「E2094 << 演算子が使われたがクラス std::wostream では UnicodeString 型のための定義が存在しない」というエラーが発生。