【发布时间】:2013-09-04 02:42:02
【问题描述】:
我正在编写一个游戏引擎,我正在创建一些资源基类,例如顶点、纹理、字体等。
现在我正在创建一些基本类,我想向使用这些基类的其他程序员公开,例如 Image(使用纹理)、Text(使用字体)、Models(使用顶点)等
游戏引擎也暴露出来了,所以他们可以调用它的函数等来编写游戏。
但我根本不希望他们访问基类,也不希望它与他们的类发生冲突。 例如,他们可能想为游戏中的某些东西创建一个名为“Material”的类,但我的资源已经有一个“Material”类,我怎样才能避免冲突,甚至更好地隐藏这些基类(这样它们就不会弄乱它并打破一些东西)?
编辑:例如,我有暴露的类Image。 它包含 Quad 和 Texture 基类的私有实例,我的资源管理器确保始终只加载其中一个(所以我没有重复的纹理/四边形在内存中)。
Texture 本身有一个宽度/高度,并管理加载到卡片中的数据。 Quad 也一样。
图像确保在请求调整图像大小时,它会更改需要更改的所有内容并将数据重新上传到卡片。
Texture 和 Quad 是公开的,因为它们几乎无处不在,有模块和一些对其应用效果的类。
他们(其他程序员)可以使用 Image 作为实例、继承或成员,因为它管理自己,我只希望这个 Image 类公开,所以他们不知道有 Quad 和 Texture 类,而且它也不会干扰他们的类命名。
【问题讨论】:
-
您可以通过将构造函数或析构函数设为公共或私有来隐藏它们。这至少可以防止(非法)实例化。
-
将内容设为私有并使用公共 getter 和 setter?
-
您到底想防止什么?有人在应该使用从 Material 派生的类时意外使用了 Material 类?或者您是否有一个在引擎之外“不存在”的 Material 类,只是不希望用户的类与
Material发生冲突? -
我试图阻止访问我的引擎用来管理它的基类,如果他们访问它,他们可能会更改他们的 ID(将完全弄乱我的资源模块中的 ID 设置/查找) ,或者更改一些不应该直接更改的数据或参数。我正在创建的基类执行所有必需的功能,然后更改参数,这是我想要公开的唯一类。其他基类需要公开,因为它们也可以从其他模块访问。
标签: c++