Declarations
template <class Type, class Source> Type lexical_cast(const Source& src, std::ios::fmtflags = 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
- 変換前の型.引数として指定した変数の型が適用されます.