(二)boostライブラリの文字列フォーマット

1948 ワード

プログラムでは文字列フォーマットがよく使われますが、個人的にはCフォーマットの出力に傾いています.ログを印刷するだけでprintfで十分です.文字列を生成するまでsprintfを選択することができますが、これらは事前に空間を割り当てる必要があります.予知できない長さの文字列フォーマットでは、鶏肋を比較します.しかし、以下のように実現できます.
void XString::format(const char *strFmt, ...)
{
    va_list vl;
    va_start(vl, strFmt);
    int count = _vscprintf(strFmt, vl); //_vsctprintf(format, vl); 
    va_end(vl);
    char *pszBuf = new char[count + 1];
    va_start(vl, strFmt);
    vsprintf_s(pszBuf, count + 1, strFmt, vl);  //_vstprintf_s
    va_end(vl);
    this->assign(pszBuf);
    delete pszBuf;
}

ただし、C++プログラムでは、%sがサポートする パラメータのタイプはchar*である があるため、プログラムは る で とされる.c_str()は、 の けし をもたらすことが い
boostのformatコンポーネントがあれば、 の はすべて されます.
 
、formatがprintfに わる
 
std::cout << format("%s:%04d%02d%02d") % "  "% 2013 % 9 % 28 << std::endl;

%sはstd::string
std::string test("string");
format fmt3("%s");    
std::cout << format("%s") % test<< std::endl;

 
、formatは%Nをサポートする
format fmt2("%1% + %2%*%1% = %3%");
fmt2 % 2 % 3 % (2+2*3) ;
std::cout << fmt2.str() << std::endl;