boost 类型转换操作符
2017-11-24 14:19
176 查看
struct father { virtual ~father() { }; }; struct mother { virtual ~mother() { }; }; struct child : public father, public mother { }; void func(father *f) { //将f父类的指针 转换为子类的指针,这种叫向下转换 child *c = dynamic_cast<child*>(f); } void CMFC08Dlg::OnBnClickedButton2() { //Boost.Exception child *c = new child; func(c); father *f = new child;//定义一个子类,将指针传给父类 mother *m = dynamic_cast<mother*>(f); //将父类的指针转给母类,交叉转换 }
struct father { virtual ~father() { }; }; struct mother { virtual ~mother() { }; }; struct child : public father, public mother { }; void func(father *f) { //将f父类的指针 转换为子类的指针,这种叫向下转换 //boost::polymorphic_downcast,只能是向下转换操作,它内部使用 static_cast 实现类型转换,它内部使用 static_cast 实现类型转换 //实际上在 assert ()函数中使用 dynamic_cast 验证类型转换是否合法,只能在定义了NDEBUG宏的情况下执行 child *c = boost::polymorphic_downcast<child*>(f); } void CMFC08Dlg::OnBnClickedButton2() { //Boost.Exception child *c = new child; func(c); father *f = new child;//定义一个子类,将指针传给父类 // boost::polymorphic_cast 其实内部也是使用dynamic_cast,只是他不需要通过返回值检测,他可以抛出异常 mother *m = boost::polymorphic_cast<mother*>(f); //将父类的指针转给母类,交叉转换 }
#include <boost/lexical_cast.hpp>
//lexical_cast //1.boost::lexical_cast 内部使用流(streams)执行转换操作。 因此,只有那些重载了 operator<<() 和 operator>>() 这两个操作符的类型可以转换。 //2.使用 boost::lexical_cast 的优点是类型转换出现在一行代码之内,无需手工操作流(streams)。 //3.由于流的用法对于类型转换不能立刻理解代码含义, 而 boost::lexical_cast 类型转换操作符还可以使代码更有意义,更加容易理解 //4.转换NG情况下,抛出异常boost::bad_lexical_cast try { std::string szData=boost::lexical_cast<string>(3.14156789); TRACE("%s\n",szData.c_str()); } catch (boost::bad_lexical_cast& e) { TRACE("%s\n",e.what()); }
#include <boost/numeric/conversion/cast.hpp>
//boost::numeric_cast try { int i = 0x10000; //boost::numeric_cast //1.会对需要转换的数字是否能够完全转换,不改变数值的情况下是否能够转换 //2.如果不能转换则抛出异常 short s = boost::numeric_cast<short>(i); TRACE("%d\n",s) ; } catch (boost::numeric::bad_numeric_cast &e) { //boost::numeric::positive_overflow,boost::numeric::negative_overflow两种异常 TRACE("%s\n",e.what());//bad numeric conversion: positive overflow }
相关文章推荐
- boost 类型转换操作符
- postgresql常用函数及操作符及类型转换等
- postgresql常用函数及操作符及类型转换等
- Effective C# 使用as和is操作符来做类型转换
- boost 数据类型转换的方法
- swift--使用 is 和 as 操作符来实现类型检查和转换 / AnyObject与Any的区别
- 《Effective C#》Item 3:使用as和is操作符来做类型转换
- [C++再学习系列] 隐式类型转换与转换操作符operator T
- C++类型转换操作符---补充(8)《Effective C++》
- 重载类型转换操作符 遇到的问题
- C++类型转换操作符之间的区别
- c++中的四种类型转换操作符
- boost::lexical_cast 字符类型转换 字符串算法和文字处理
- javaScript笔记 (三) 数据类型转换 和 操作符、流程控制
- 快速认识boost 数据类型转换
- C++ 四种类型转换操作符
- C++ Primer 学习笔记_63_满载操作符与转换 -转换与类类型【上】
- [C++再学习系列] 隐式类型转换与转换操作符
- swift基础(十):类型检查操作符is、类型转换操作符as(包括!及?的区别)、AnyObject和Any类型
- swift 中 as、as!、as? 这三种类型转换操作符的异同 及一些控件用法