如何更好的隐藏实现?类内部使用了STL容器而不让外部知道

DarknessTM 2008-07-16 09:33:22
ClassA 利用ClassB 完成一些功能

其中ClassB中使用了std::vector
按照一般设计 std::vector 会成为一个成员变量,这样的话,ClassB的头文件中必定需要 include vector,感觉在头文件里引用其他头文件总是不爽

或者在cpp文件中做成一个 文件范围的全局变量? 这也不是很爽

或者头文件中定义为 指针,而且是 void*,在cpp中 new 出一个vector?


反正3种都不是很爽,有没有其他办法?
...全文
172 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2008-07-16
  • 打赏
  • 举报
回复
C++是一种实用型语言,不要多玩语法上的完美性。
程序员承担一部分职责后,代码将干净、简单很多,程序就更健壮更可维护。
DarknessTM 2008-07-16
  • 打赏
  • 举报
回复
在头文件中如此倒可以勉强通过编译

namespace std
{
template<class _Ty,
class _Ax = _Ty >
class vector;
}

std::vector 原本的第二个参数用了另外一个类,如此原本照抄就又复杂了。

这样的结果是一个 默认参数重定义的警告……

看来include vector 吧……
taodm 2008-07-16
  • 打赏
  • 举报
回复
打开iosfwd头文件学习。
DarknessTM 2008-07-16
  • 打赏
  • 举报
回复
其实我说的 隐藏 倒也不是极端的减少private的东西

事实上,我只是希望 头文件比较干净,不去 include 过多文件,当然这点其实 在VC中用预编译头文件就可以解决了


我就是倾向于在 cpp文件中 include 一大堆,而不是在头文件中

把std::vector 在头文件中声明这个问题,我目前是无解,请指教
taodm 2008-07-16
  • 打赏
  • 举报
回复
基本语法问题是该你自己看书讲解的。
而无论这个问题是否真的有解,对你的原始问题都无关紧要。
关键是你对“更好隐藏”起偏差了。
C++的思想里,更好的隐藏就是把更多的东西放入private段。
它没有为其它“隐藏”提供什么有帮助的语法。
它认为更多的责任是类的使用者的,他不该去探索别人的私有细节。
DarknessTM 2008-07-16
  • 打赏
  • 举报
回复
我反正没成功

那怎么不 include vector的情况下 声明 vector<int> ?
taodm 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 DarknessTM 的回复:]
其实ClassBImpl 可以声明一下了 而不用include,其实类似3楼的说法

vector 是类模板,无法只声明就使用指针……
[/Quote]
你真的真的确定?
DarknessTM 2008-07-16
  • 打赏
  • 举报
回复
其实ClassBImpl 可以声明一下了 而不用include,其实类似3楼的说法

vector 是类模板,无法只声明就使用指针……
taodm 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 DarknessTM 的回复:]
我突然想起来抽象与实现分离的方法
ClassB + ClassBImp ....
[/Quote]
真是好主意,隐藏了vector,却又暴露了ClassBImp,岂不是50步与100步?
DarknessTM 2008-07-16
  • 打赏
  • 举报
回复
to:taodm
说实话JAVA的封装的确是看起来很爽……

to:iwong
其实这样倒也可以






我突然想起来抽象与实现分离的方法
ClassB + ClassBImp ....
matrixdwy 2008-07-16
  • 打赏
  • 举报
回复
直接把vector的头文件内容复制过来
iwong 2008-07-16
  • 打赏
  • 举报
回复
在你的类里面再写一个类或结构,把所有数据成员放到找个类或结构里,头文件里面只写声明,具体实现放在.cpp里
偶像罗斯福 2008-07-16
  • 打赏
  • 举报
回复
mark
taodm 2008-07-16
  • 打赏
  • 举报
回复
哦,那用java或者python这类比较爽。
它们可以连“头文件”的概念都可以没有。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧