最終更新日時:
が更新

履歴 編集

文字列フォーマット

C言語では、sprintfを使用してchar配列としての文字列をフォーマット設定することができたが、C++において、std::stringに対する文字列フォーマット機能は、C++14時点で標準ライブラリとしては提供されていない。

Boost Format Libraryは、std::stringの文字列フォーマット、およびストリームへのフォーマット出力の機能を提供するライブラリである。

インデックス

基本的な使い方

Boost.Formatの基本的な使い方は、boost::format()に書式文字列を設定し、operator%()を使用して各プレースホルダーを置き換える値を可変引数として設定する、というものである。

以下は、フォーマット指定した文字列を標準出力に出力している。

#include <iostream>
#include <boost/format.hpp>

int main()
{
    std::cout <<
        boost::format("%2% %1%") % 3 % std::string("Hello")
    << std::endl;
}

実行結果:

Hello 3

printf()のフォーマットと違うところは、"%d""%s"といった型指定が必ずしも必要ないということだ。

Boost.Formatでは、型指定の代わりに、"%1%"のようにして引数の番号を指定できる。これによって、同じ引数を何度も使用することができ、順番も好きに入れ替えることができるのである。

この場合、"%1%"3に置き換えられ、"%2%"が""Hello""に置き換えられて標準出力に出力される。

printf風に書式を設定する

Boost.Formatでは、printf()風の書式設定もサポートしている。

#include <iostream>
#include <boost/format.hpp>

int main()
{
    std::cout <<
        boost::format("%d %s") % 3 % std::string("Hello")
    << std::endl;
}

実行結果:

3 Hello

boost::formatには、printf()関数がサポートしている"%d""%s"などの書式設定が可能である。"%d"は整数型に対応し、"%s"は文字列型に対応している。

この場合、"%d"3に置き換えられ、"%s""Hello"に置き換えられて標準出力に出力される。

フォーマット設定されたstd::stringを作成する

Boost.Formatで書式設定されたstd::stringを作成するには、boost::formatクラスのstr()メンバ関数を使用する。

#include <iostream>
#include <string>
#include <boost/format.hpp>

int main()
{
    const std::string s = (boost::format("%2% %1%") % 3 % std::string("Hello")).str();

    std::cout << s << std::endl;
}

実行結果:

Hello 3

C++の国際標準規格上の類似する機能