我正在研究Java游戏库的图形代码。我制作了名为com.engine.graphics
的包裹。在这个包中,我有一个名为VertexArrayObject
的低级类。该类由"客户级"客户将使用的类;但是,我不想让客户访问VertexArrayObject
,因为它只会使他们对我的库的理解变得复杂。因此,我给了VertexArrayObject
默认访问说明符;这样,只有com.engine.graphics
内的类可以访问它,并且还告诉客户他们不需要知道它是什么。
就像Java的这个标准约定一样,我认为必须有一些C ++的标准约定来处理这个问题;但是,我的互联网搜索没有产生任何结果。
所以,我的问题是,惯例是什么?如果没有,那么最好的方法是什么?
答案 0 :(得分:0)
C ++没有“包”的概念,因此在技术上没有“包保护”。 (模块有一个命题,但即使在即将推出的C ++ 17标准中也不会包含它。)
有许多方法可以将类从外部世界隐藏起来或限制对它的访问,在语法层面上你可以诉诸:
拥有很多朋友类和函数是一团糟,但有理由要求明确列出这些:它们打破了封装原则。
最后,你可以使用“私有实现”idiom(又名pimpl,又名opaque指针),它包含定义一个包含指向实现类的指针的可见类,并转发所有调用,而实现类是在一个单独的cpp中定义的文件或外观设计模式。
选择适合给定类关系的任何内容。标准库倾向于使用嵌套类,而Qt是一种流行的图形库,它依赖于pimpl。