免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1837 | 回复: 2
打印 上一主题 下一主题

[C++] 这样使用boost::any为何报错? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-24 11:46 |只看该作者 |倒序浏览
class A{
public:
  int type;
  double da;
  int   ib;
};
class B:public A{
public:
  string c;
};
main(){
  vector<boost::Any> v;
  A aa;
  aa.da = 1.1; aa.ib = 2; aa.type = 0;
  B bb;
  bb.da = 11.11;  bb.ib = 22;
  bb.c = "hello"; bb.type = 1;
  boost::Any any = aa;
  v.push_back(any);
  boost::Any any1 = bb;
  v.push_back(any1);
  for(vector<boost::Any>::iterator it = v.begin();it != v.end();it ++){
   A x = boost::any_cast<A>(*it);
   if(x.type == 0){
     cout << x.type << x.da << x.ib << endl;    continue;
   }
   cout << x.type << endl;
   B y = boost::any_cast<B>(*it);
   cout << y.type << y.da << y.ib << y.c << endl;
  }
}
这样做第一条遍历时可打印出来,但第二条就core dump。错在哪里呢?

论坛徽章:
0
2 [报告]
发表于 2008-12-24 12:02 |只看该作者
但第二次运行,将B造型成父类A,有什么错呢?还是说typeid不一样造成的?若按你说的dynamic_cast要怎么做?

[ 本帖最后由 jchc 于 2008-12-24 12:23 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-12-24 12:57 |只看该作者
typeid能否看出类的继承关系?即父类和子类的typeid是否有某种联系?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP