lexical_cast
lexical_cast - 1.47.0
atoi,atof,sprintf,sscanf, etc.を使わずに、文字列<->int,double, etc. の変換ができる。
C++11でstd::to_string()が使えるようになったので、使用頻度は減りますが、
lexical_castはoperator <<と>>を定義しときゃ使えるので、std::complexとかにも使えます。
主に、std::stringstreamを使うのが面倒なときに使う。
例外
失敗したらboost::bad_lexical_castが投げられる。
lexical_cast_TEST.cpp
#include<iostream> #include<string> #include<boost/lexical_cast.hpp> struct Intint{ int a,b; Intint(int arg1, int arg2) : a(arg1), b(arg2){} }; std::ostream& operator<<(std::ostream& os, const Intint& d){ return os << d.a <<"-" << d.b; } int main(){ double d = 10.0; Intint ii(2,4); try{ //double->std::string std::string str = boost::lexical_cast<std::string>(d); std::cout << (str + ": double->std::stringにしたのでoperator+が使える") << std::endl; //std::string->double std::cout<<"実数を入れてね:"; std::cin >> str; std::cout << boost::lexical_cast<double>(str) + 10.0 << ": std::string->doubleにして10.0足した" << std::endl; //Intint->std::string std::cout << (boost::lexical_cast<std::string>(ii) + ": <<と>>を定義しときゃ基本的に使える") << std::endl; }catch(boost::bad_lexical_cast& e){ std::cerr << e.what() << std::endl; } return 0; }
結果
lexical_cast_TEST.exe 10: double->std::stringにしたのでoperator+が使える 実数を入れてね:0.5 10.5: std::string->doubleにして10.0足した 2-4: <<と>>を定義しときゃ基本的に使える
lexical_cast_TEST.exe 10: double->std::stringにしたのでoperator+が使える 実数を入れてね:(^ω^) bad lexical cast: source type value could not be interpreted as target