C++ 前向声明

看OCC代码时候看到,class V3d_Viewer;

这是一个C++的前向声明,在 C++ 中,class V3d_Viewer; 是一个前向声明(forward declaration),用于告诉编译器 V3d_Viewer 是一个类,但不提供其具体定义。通过前向声明,可以在不需要知道 V3d_Viewer 类的具体实现的情况下引用它,从而减少编译依赖并提高编译效率。

这种声明通常用于以下情况:

  1. 减少编译依赖:如果你只需要在头文件中引用指向该类的指针或引用,而不需要知道该类的具体实现,就可以使用前向声明来避免包含不必要的头文件,从而减少编译时间和编译依赖。

  2. 解决依赖循环:如果两个类相互引用对方,使用前向声明可以打破这种循环依赖,避免编译错误。

假设你有一个类 V3d_Viewer,它的具体定义在 V3d_Viewer.hxx 头文件中。你可能在另一个类的头文件中使用前向声明来引用它,例如:

// ViewerManager.hxx
#ifndef VIEWERMANAGER_HXX
#define VIEWERMANAGER_HXX

class V3d_Viewer;  // 前向声明

class ViewerManager {
public:
    ViewerManager();
    ~ViewerManager();

    void SetViewer(V3d_Viewer* viewer);
    V3d_Viewer* GetViewer() const;

private:
    V3d_Viewer* myViewer;
};

#endif // VIEWERMANAGER_HXX

ViewerManager 类使用前向声明 class V3d_Viewer; 来声明 myViewer 成员变量是一个指向 V3d_Viewer 类的指针,并在成员函数中引用它。具体的 V3d_Viewer 类定义在cpp文件中包含

// ViewerManager.cxx
#include "ViewerManager.hxx"
#include "V3d_Viewer.hxx"  // 包含 V3d_Viewer 类的具体定义

ViewerManager::ViewerManager() : myViewer(nullptr) {}

ViewerManager::~ViewerManager() {}

void ViewerManager::SetViewer(V3d_Viewer* viewer) {
    myViewer = viewer;
}

V3d_Viewer* ViewerManager::GetViewer() const {
    return myViewer;
}

相关推荐

  1. C++ 声明

    2024-07-20 04:10:02       18 阅读
  2. C++ 类的声明的用法

    2024-07-20 04:10:02       42 阅读
  3. 头文件相互包含 声明

    2024-07-20 04:10:02       24 阅读
  4. 漫谈:C C++ 嵌套包含与声明

    2024-07-20 04:10:02       30 阅读
  5. C++ 大三/大五法则(__cplusplus 兼容)

    2024-07-20 04:10:02       34 阅读
  6. C++之类的声明

    2024-07-20 04:10:02       46 阅读
  7. C语言 数组声明

    2024-07-20 04:10:02       29 阅读
  8. C++类型与声明

    2024-07-20 04:10:02       28 阅读
  9. caffe模型的python测试

    2024-07-20 04:10:02       65 阅读
  10. 图的星表示2

    2024-07-20 04:10:02       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 04:10:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 04:10:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 04:10:02       45 阅读
  4. Python语言-面向对象

    2024-07-20 04:10:02       55 阅读

热门阅读

  1. Python-数据爬取(爬虫)

    2024-07-20 04:10:02       16 阅读
  2. 深入理解 Vue 3 组件通信

    2024-07-20 04:10:02       22 阅读
  3. 参考网站总结

    2024-07-20 04:10:02       21 阅读
  4. Spring注解开发

    2024-07-20 04:10:02       20 阅读
  5. C++ 数据结构

    2024-07-20 04:10:02       18 阅读
  6. PYQT按键长按机制

    2024-07-20 04:10:02       16 阅读
  7. godot使用ws

    2024-07-20 04:10:02       18 阅读
  8. mysql(四)

    2024-07-20 04:10:02       16 阅读
  9. Kubernetes Service 之 LoadBalancer

    2024-07-20 04:10:02       18 阅读
  10. 第五节 LLaVA模型lora推理模型解读(下篇)

    2024-07-20 04:10:02       17 阅读