OSG学习笔记2—节点属性访问器

访问器Visitor在osg库中用于对不同节点执行自定义操作,避免数据结构变化。osg::NodeVisitor作为抽象接口,包含apply()方法供节点调用。通过继承并重写apply(),实现多态行为,为C++中的接口概念提供实例。
摘要由CSDN通过智能技术生成

osgStudy4_20.cpp : 定义控制台应用程序的入口点。
节点属性访问器
自定义NodeVisitor并用于节点访问的方法,重构重要的apply()虚函数,在其中打印节点的属性信息(名字和所在库)并通过适当的缩进来表达整个节点树的层次结构。

访问器Visitor,使用典型的对象行为模式,它可以向不同的节点,施加用户自定义的操作,将这些操作整合到一个对象中,同时避免这些操作可能造成的数据结构本身的变化,从而实现了一种更加自由的编码方式。

每个数据元素节点都可以通过accept()方法调用访问器,访问器通过apply()方法获取传入的节点对象,并执行所需的节点操作。

osg::NodeVisitor只是访问器角色的抽象接口。我认为这里的接口不是C++标准定义的接口,查看了源码,在NodeVisitor中定义的是不同节点的apply虚函数,用于用户自定义的Visitor子类的重写,不是纯虚函数,这里书中叫做接口,应该是为了理解吧。

//——C++构造函数初始值列表————
//InfoVisitor():osg::NodeVisitor(TRAVERSE_ALL_CHILDREN), _indent(0){}
//构造函数初始化列表。C++Primer5 P258
//如果没有在构造函数的初始值列表中显式的初始化成员,则该成员在构造函数体之前执行默认初始化,就是通常的类的构造函数写法。
//但有一些数据成员必须被初始化,例如const,或者引用,当成员属于某种类类型且该类没有定义默认构造函数时,必须将这个成员初始化。
//建议:养成使用构造函数初始值的习惯,能避免一些编译
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值