liuaner022 发表于 2013-12-24 11:18:59

关于Node类和Group类的问题

本帖最后由 liuaner022 于 2013-12-24 14:34 编辑

      最近在看《OSG程序设计教程》。其中第三章里作者说Node类和Group类可以相互转换,并有如下代码:
osg::Group* root = new osg::Group() ;
osg::Node *glider = osgDB::ReadNodeFile(“glider.osg”) ;
glider ->asGroup() ->addChild(osgDB::ReadNodeFile(“xxx.osg”)) ; //此处我修改成"cow.osg"
root ->addChild(glider) ;
root ->addChild(osgDB::readNodeFile(“osgcool.osg”)) ;
但是运行时却发现asGroup方法总是返回空指针。于是找出Node文件,其中对asGroup的注释是:
/* convert 'this' into a Group pointer if Node is a Group, otherwise return 0. Equivalent to dynamic_cast<Group*>(this).*/
virtual Group* asGroup() { return 0; }
/* convert 'const this' into a const Group pointer if Node is a Group, otherwise return 0. Equivalent to dynamic_cast<const Group*>(this).*/
virtual const Group* asGroup() const { return 0; }
       个人理解是:如果this指针(也就是一个Node指针)指向的是一个Group类实例,那么返回的是转换后的Group指针;如果不是Group类实例则返回0。说白了,就是把一个指向子类实例的父类指针转换成相应的子类指针,遵循最普通的类继承原则。不知道是我理解错误还是原书代码错误。原书貌似用的是OSG 2.2.0,我用的是OSG 3.0.1,不知道是不是因为版本的问题。

shirro 发表于 2013-12-24 20:26:21

是转不了
页: [1]
查看完整版本: 关于Node类和Group类的问题