Declarations
template <class Type, class Source> Type lexical_cast(const Source& src, std::ios::fmtflags base = std::ios::dec); class bad_lexical_cast : public std::bad_cast;
Overview
lexocak_cast() は,文字列<->数値の相互変換を行うための関数です. boost::lexical_cast をベースに実装しています.引数 base には基数として, std::ios::dec,std::ios::hex,std::ios::oct を指定することができ, それぞれ与えられた文字列を 10 進数,16 進数,8 進数と見なして変換がなされます. また,std::ios::showbase を指定すると与えられた文字列に応じた変換がなされます (e.g., 0xfa なら 16 進数として変換される).
lexical_cast() はキャストに失敗するとbad_lexical_cast を例外として送出します.
Example
#include <iostream> #include <string> #include "clx/lexical_cast.h" int main(int argc, char* argv[]) { std::string s1 = "326"; std::string s2 = "0xf2a"; std::string serr = "nonum"; try { int a = clx::lexical_cast<int>(s1, std::ios::oct); int b = clx::lexical_cast<int>(s2, std::ios::showbase); std::cout << "str " << s1 << ", val " << a << std::endl; std::cout << "str " << s2 << ", val " << b << std::endl; std::string s3 = clx::lexical_cast<std::string>(a, std::ios::hex); std::cout << "val " << a << ", str " << s3 << std::endl; int c = clx::lexical_cast<int>(serr); std::cout << "str " << serr << ", val " << c << std::endl; } catch (clx::bad_lexical_cast e) { std::cerr << "exeption: " << e.what() << std::endl; std::exit(-1); } return 0; }
Result str 326, val 214 str 0xf2a, val 3882 val 214, str d6 exeption: bad lexical cast
Template Parameters
- Type
- 変換後の型を指定します.
- Source
- 変換前の型.引数として指定した変数の型が適用されます.