关于gpstk空间名封装的问题
来源:互联网 发布:税务师考试含金量 知乎 编辑:程序博客网 时间:2024/06/06 09:21
关于gpstk空间名封装的问题
最近看了下GPSTK中的Vector类,发现这个类带来的问题很大。这个下次再说吧先说说命名空间,n
amespace是为了解决C++中的名字冲突而引入的。
什么是名字冲突呢?比如,在文件x.h中有个类MyClass,
在文件y.h中也有个类MyClass,而在文件z.cpp中要同时
引用x.h和y.h文件。显然,按通常的方法是行不能的,
那怎么办呢?引入namespace即可。例如:
// x.hnamespace MyNamespace1{ class MyClass { public: void f(); private: int m; }};// 在y.h中的内容为// y.hnamespace MyNamespace2{ class MyClass { public: void f(); private: int m; }};// 然后在z.cpp中引入x.h和y.h// z.cpp#include"x.h" #include"y.h" void z::f(){ //声明一个文件x.h中类MyClass的实例x MyNamespace1::MyClass x; //声明一个文件x.h中类MyClass的实例x MyNamespace2::MyClass y; //调用文件x.h中的函数f x.f(); //调用文件y.h中的函数f y.f();}
名字空间实质上是一个作用域。
通过上面的一个实例应该知道名字空间的作用了吧
在GPSTK中大部分都是封装在 namespace gpstk下面的,如果你自己写模块函数就会发现这个给你带来一些灾难
首先如果你在hpp中需要定义封装在namespace下的对象,那么可以采用三种方式:
1. 加上using namespace gpstk
#include <cmath>#include <stdio.h>#include "Position"using namespace std;using namespace gpstk;calss X{};
2. 或者像下面的把类封装在gpstk下面
#include <cmath>#include <stdio.h>#include "Position"using namespace std;namespace gpstk;{ calss X { };}
3. 老办法,在每次定义 gpstk 下的对象时候用 gpstk 限制起来 ,例如gpstk::Position pos
显然第三中方法在只定义少量对象时是可以的,可是定义的对象多了的时候你恐怕也很苦恼吧~~不过这个是我认为最安全的方式,可惜效率不高
好了方法1可能是最好的方法了,绝不是,在有些情况下你会崩溃,tk就是很好的例子,例如想下面这样写自己的代码,当你使用某些cmath的函数时候例如sin(double)会提示找不到匹配的定义,因为tk中重写了sin()函数,其输入参数模版类型,而这里就会调用这个重写的函数,想到这儿就寒,C++真是头疼啊。处理方法比较简单将该类不封装在gpstk下面,或者是在sin()前面加上 std:: ,具体的看你的需要,没有万能的解决方案
#include <cmath>#include <stdio.h>#include "Position"using namespace std;using namespace gpstk;namespace gpstk{ calss X { };}
- 关于gpstk空间名封装的问题
- 关于名空间的使用小结
- C#名空间问题
- GPSTK日志三 TK的安装
- 智能设备的名空间的奇特问题。
- 关于namespace和类名的问题
- 关于ubuntu多登录名的问题
- 关于未名湖边的烦恼问题
- 关于oracle 实例名大小写的问题
- 关于Android中签名文件的问题
- 关于visual c++ DLL封装的问题
- 关于查询排序的空间使用问题
- 关于QQ空间进不了的问题
- 关于表空间的一个问题
- 关于DropDownList空间的绑定问题
- 关于C++命名空间的一些问题
- 关于关于包中封装结构体的问题
- 名空间的重认识
- 利用随机化的思想对快速排序进行优化
- Cocos2D引擎学习-动作类的学习(一)
- js、jquery插件记录
- FTP 协议详解
- 黑马程序员——抽象类的理解
- 关于gpstk空间名封装的问题
- Struts2拦截器 —— prepare拦截器
- tomcat 输入ip可以直接访问项目的方法
- Ubuntu下QT的安装详细教程
- 大数问题
- iOS7下status bar相关问题的解决方法
- Mysql的“Table 'mysql.servers' doesn't exist”的解决方法
- QT实现浏览器插件 调用及回调 (三)
- svn命令行命令