サンプルの動作確認バージョン [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
を書いておくべきかもしれません。
sprintf, itoa, strtol
を使い分けたりせずに、
C++のキャストと全く同じ単一の形式で変換ができるというのは、
なかなか美しいと私なんぞは思ってしまうわけです。
上のサンプルで書いたのは int
の場合でしたが、
double
とか std::complex
とかでも全く同じように使えます。
中では std::stringstream
に <<
で流し込んで >>
で取り出す、という形で実装されていますので、
標準のストリームI/Oに対応していてデフォルトコンストラクタ /
コピーコンストラクタ / 代入演算子が正しく実装されているクラスなら、
何でも行けちゃいます。
ver 1.30.0 で、ワイド文字関係や、スペースを含んだ文字列の変換など、 これまでダメダメだった部分が一気に改善されました。