外贸网站vps服务器,广东网站建设网,宜宾长宁网站建设,源码做网站教程Boost库LexicalCast模块 文章目录 Boost库LexicalCast模块介绍使用基础API自定义类型转换 介绍
lexical_cast库进行”字面值“之间的通用转换
头文件
#includeboost/lexical_cast.hpp使用
基础API
lexical_cast
boost::lexical_cast可以在各种基本类型中转换
#i…Boost库LexicalCast模块 文章目录 Boost库LexicalCast模块介绍使用基础API自定义类型转换 介绍
lexical_cast库进行”字面值“之间的通用转换
头文件
#includeboost/lexical_cast.hpp使用
基础API
lexical_cast
boost::lexical_cast可以在各种基本类型中转换
#include boost/lexical_cast.hpp
#include iostream
#include stringusing namespace std;int main() {string s1;string s2 888;int val 123; s1 boost::lexical_caststring(1.532e5);cout s1 endl;s1 boost::lexical_caststring(1234);cout s1 endl;s1 boost::lexical_caststring(5.265);cout s1 endl;val boost::lexical_castint(s2);cout val endl;
}lexcial_cast的内部使用了标准的流操作因此它对转换对象有如下要求: Source是可流输出的(OutputStreamable)即定义了一个操作符Target是可流输入的(InputStreamable)即义了一个操作符Target是可复制的Target是可默认构造的这意味着可以默认初始化该类型的对象 bad_lexical_cast
如果转换失败则会抛出从 std::bad_cast 派生的 boost::bad_lexical_cast 类型的异常。 try{cout lexical_castint(0x100);cout lexical_castdouble(HelloWorld);cout lexical_castlong(1000L);cout lexical_castbool(false) endl;}catch (bad_lexical_cast e){cout error: e.what() endl;}try_lexical_convert
lexical_cast在名字空间boost::conversion提供try_lexical_convert()函数可以避免抛出异常它以bool返回值表示是否转换成功 float f;for (auto str : {abc, 1.2}) {if (try_lexical_convertfloat(str, f)) {cout Succes str \ to f endl;} else {cout Fail str \ to float endl;}}自定义类型转换
如果我们想要将lexical_cast应用于自定义的类需要实现流操作符operator
自定义类转字符串
#include boost/lexical_cast.hpp
#include iostream
#include stringusing namespace std;class Point {public:Point(float x, float y) : x_(x), y_(y) {}friend ostream operator(ostream output, const Point p) {output ( p.x_ , p.y_ );return output;}private:const float x_;const float y_;
};int main() {using boost::bad_lexical_cast;using boost::lexical_cast;const auto s lexical_caststring(Point(1.1f, 2.2f));cout s endl;
}字符串转自定义类
class Point {public:friend istream operator(istream input, Point p) {input p.x_;return input;}friend ostream operator(ostream output, const Point p) {output Point( p.x_ );return output;}Point() { x_ 0; }Point(const Point pt) {x_ pt.x_;}private:float x_;
};int main() {using boost::bad_lexical_cast;using boost::lexical_cast;const auto p lexical_castPoint(string(3.3));cout p endl;
}参考资料1 参考资料2