boost::lexical_cast

トップページ > 文字列 >

abstract

必要なヘッダ
<boost/lexical_cast.hpp>
出来ること
文字列と数値の相互変換
リファレンス
en / jp

sample

サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]

#include <string>
#include <boost/lexical_cast.hpp>
using namespace std;

int main()
{
	using boost::lexical_cast;

	string str_thousand = "1000";
	int    int_ninety   = 90;

	int    a = lexical_cast<int>( str_thousand );
	string s = lexical_cast<string>( int_ninety );
		// aには1000、sには"90"が入ります。

	return 0;
}

なお、変換出来ない場合は bad_lexical_cast 例外が投げられますので、 ホントはちゃんと try~catch を書いておくべきかもしれません。

etc

sprintf, itoa, strtol を使い分けたりせずに、 C++のキャストと全く同じ単一の形式で変換ができるというのは、 なかなか美しいと私なんぞは思ってしまうわけです。 上のサンプルで書いたのは int の場合でしたが、 double とか std::complex とかでも全く同じように使えます。

中では std::stringstream<< で流し込んで >> で取り出す、という形で実装されていますので、 標準のストリームI/Oに対応していてデフォルトコンストラクタ / コピーコンストラクタ / 代入演算子が正しく実装されているクラスなら、 何でも行けちゃいます。

ver 1.30.0 で、ワイド文字関係や、スペースを含んだ文字列の変換など、 これまでダメダメだった部分が一気に改善されました。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0