查看: 1331|回复: 4

请教:不解于osg库的Node类头文件中写写法

[复制链接]

该用户从未签到

发表于 2011-3-10 20:28:47 | 显示全部楼层 |阅读模式
  1. #ifndef OSG_NODE
  2. #define OSG_NODE 1

  3. #include <osg/Object>
  4. #include <osg/StateSet>
  5. #include <osg/BoundingSphere>
  6. #include <osg/NodeCallback>

  7. #include <string>
  8. #include <vector>

  9. namespace osg {

  10. class NodeVisitor;
  11. class Group;
  12. class Transform;
  13. class Node;//  这里可以写Node?不是还没声明吗

  14. class Switch;
  15. class Geode;//  Gedoe是Node的子类,为什么可以这样写,用意是什么

  16. typedef std::vector< Node* > NodePath;

  17. typedef std::vector< NodePath > NodePathList;

  18. typedef std::vector< Matrix > MatrixList;

  19. #define META_Node(library,name) \
  20.         virtual osg::Object* cloneType() const { return new name (); } \
  21.         virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new name (*this,copyop); } \
  22.         virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const name *>(obj)!=NULL; } \
  23.         virtual const char* className() const { return #name; } \
  24.         virtual const char* libraryName() const { return #library; } \
  25.         virtual void accept(osg::NodeVisitor& nv) { if (nv.validNodeMask(*this)) { nv.pushOntoNodePath(this); nv.apply(*this); nv.popFromNodePath(); } } \
  26.         
  27. class OSG_EXPORT Node : public Object
复制代码
以上两处疑问涉及到c++什么知识?

该用户从未签到

发表于 2011-3-11 08:50:20 | 显示全部楼层
这里只是一个简单的预声明,告诉编译器有这个类存在;cpp文件中还需要引用相应的头文件,否则会报链接错误

该用户从未签到

发表于 2011-3-11 10:50:09 | 显示全部楼层
呵呵,这个是前向声明,为了通过编译器的检查,这种方式会提高编译的速度并且减少循环依赖的可能性。这是种c++的手法。具体的说明http://blog.csdn.net/jsjwql/archive/2006/07/19/943036.aspx

该用户从未签到

 楼主| 发表于 2011-3-11 14:08:01 | 显示全部楼层
谢谢两位的回答,明白了

该用户从未签到

发表于 2011-3-11 18:01:04 | 显示全部楼层
呵呵,学个新东西,还真没注意这个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表