命名空间namespace 就是C++用来组织代码、避免名字冲突的一种机制
简单理解:命名空间就是一组变量、函数、类加一个“名字前缀”,让他们拥有唯一的身份。
例如:没有命名空间的情况下,工程中有两个类 都是System,编译器由于不知道你使用的是那个System ,就会出现问题。
class System { public: int a; }; class System { public: double b; };但是如果使用命名空间
类A:
namespace ORB_SLAM2 { class System { }; }类B:
namespace ROS { class System { }; }现在依旧有两个System,但是使用时带上命名空间就不会出现问题
ORB_SLAM2::System ROS::Systemnamespace 的基本语法
namespace 名字 { // 类 // 函数 // 变量 }命名空间可以嵌套:
namespace ORB_SLAM2 { namespace DBoW2 { class Vocabulary { }; } }使用时
ORB_SLAM2::DBoW2::Vocabulary voc;在ORB_SLAM2中的整体结构
ORB_SLAM2 (命名空间)
│
├── System (类)
│
├── Tracking (类)
│
├── Map (类)
│
├── KeyFrame (类)
│
├── MapPoint (类)
│
└── ORBVocabulary (类型别名)
调用关系
ORB_SLAM2::System ORB_SLAM2::Tracking ORB_SLAM2::Map ORB_SLAM2::ORBVocabulary