C++標準ライブラリが提供するstd::boolalpha
マニピュレータ(manipulator)と、独自ロケール(locale)/ファセット(facet)を用いた出力文字列の差し替え。
ファセットstd::numpunct<charT>
のdo_truename
, do_falsename
仮想メンバ関数をオーバーライドして、bool値をストリーム出力したときの出力文字列を差し替え可能。C++標準ライブラリの既定ファセットでは文字列 "true"/"false" が出力される。
#include <iostream> #include <locale> struct my_numpunct : std::numpunct<char> { using std::numpunct<char>::string_type; // std::basic_string<char> string_type do_truename() const { return "真"; } string_type do_falsename() const { return "偽"; } }; int main() { // 既定では数値(1/0)を出力 std::cout << true << " " << false << std::endl; // 標準facetを使って出力 std::cout << std::boolalpha; std::cout << true << " " << false << std::endl; // 自作facetを使って出力 std::locale loc(std::locale(), new my_numpunct); std::cout.imbue(loc); std::cout << true << " " << false << std::endl; }
実行結果:
1 0 true false 真 偽
C++03 22.2.3.1.2/p4より引用。C++11(N3337)では22.4.3.1.2/p5-6。
string_type do_truename() const;
string_type do_falsename() const;
4 Returns: A string representing the name of the boolean valuetrue
orfalse
, respectively. In the base class implementation these names are"true"
and"false"
, orL"true"
andL"false"
.