lexical_cast P178
示例代码
#include <boost/lexical_cast.hpp> int main() { using namespace boost; int x = lexical_cast<int>("100"); long y = lexical_cast<long>("2000"); float pai = lexical_cast<float>("3.14159e5"); double e = lexical_cast<double>("2.71828"); cout<< x << y << pai << e << endl; string str = lexical_cast<string>(456); cout<<str<<endl; cout<<lexical_cast<string>(0.618)<<endl; cout<<lexical_cast<string>(0x10)<<endl; }
异常bad_lexical_cast
当lexical_cast无法执行转换操作时会抛出异常bad_lexical_cast。我们可以利用bad_lexical_cast来验证数字符串的合法性,实现一个模板函数num_valid()的代码如下:template<typename T> bool num_valid(const char* str) try { lexical_cast<T>(str); return true; } catch(bad_lexical_cast&) { return false; };
应用于自己的类
示范
class demo_class { friend std::ostream& operator<<(std::ostream& os, const demo_class& x) { os<<"demo_class's Name"; return os; } }; int main() { cout << lexical_cast<string>(demo_class())<<endl; }
模板类 输出类名
template<typename T> struct outable { friend std::ostream& operator<<(std::ostream& os, const T& x) { os <<typeid(T).name(); return os; } }; class demo_class:outable<demo_class>{}; int main() { cout<<lexical_cast<string>(demo_class())<<endl; }