C++如何隐藏公共类?

Dan*_*cco 2 c++

我正在编写一个游戏引擎,我正在创建一些资源基类,如顶点,纹理,字体等.

现在我正在创建一些基本类,我希望将其暴露给使用这些基类的另一个程序员,例如Image(使用纹理),Text(使用字体),Models(使用顶点)等

游戏引擎也暴露出来,所以他们可以调用它的功能,例如编码游戏.

但我不希望他们访问基类,我也不希望它与他们的类冲突.例如,他们可能想为某个内容创建一个名为"Material"的类,但我的资源已经有一个"Material"类,我怎样才能避免冲突,甚至更好,隐藏这些基类(所以他们不要乱用它并打破了一些东西)?

编辑:例如,我有暴露的类Image.它包含QuadTexture基类的私有实例,我的资源管理器确保总是只加载其中一个(因此我在内存中没有重复的纹理/四边形).

纹理本身具有宽度/高度,并管理加载到卡的数据.Quad相同.

图像确保在请求图像调整大小时,它会更改需要更改的所有内容并将数据重新上载到卡中.

纹理四边形是公共的,因为它们几乎用于所有地方,有模块和一些应用效果的类.

他们(其他程序员)可以使用Image作为实例,继承或作为成员,因为它管理自己,我只想暴露这个Image类,所以他们不知道有QuadTexture类,它也不会也不会影响他们的班级命名.

Cha*_*had 6

第一个(也是最简单的)方法是将库中的所有对象封装在特定的命名空间中.

然后它变得有点复杂.如果要导出仅通过包含使用"内部类"的"公共类",则可以使用前向声明来执行此操作,并保留指向您使用的"私有类"的指针.这可以使用pimpl习语为行为和属性完成

这是一个例子:

namespace Foo
{
   class BarImpl;

   class Bar
   {
   // ...
   private:
      std::unique_ptr<BarImpl> object_;
   };
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您的"公共类"需要定义"私有类"(通过直接包含或继承),那么没有提供"简单"的情况下,没有真正的方法将您的库(源代码形式)提供给用户访问那些支持类.