C++如何隐藏公共类
C++ How can I hide a public class?
我正在编写一个游戏引擎,并创建一些资源基类,如顶点、纹理、字体等。
现在我正在创建一些基本类,我想向另一个使用这些基本类的程序员公开,例如图像(使用纹理)、文本(使用字体)、模型(使用顶点)等
游戏引擎也是公开的,所以他们可以调用它的函数等来编码游戏。
但我根本不希望他们访问基类,也不希望它与他们的类发生冲突。例如,他们可能想为ingame创建一个名为"Material"的类,但我的资源已经有了一个"Material"类,我该如何避免冲突,甚至更好地隐藏这些基类(这样他们就不会弄乱它并破坏某些东西)?
编辑:例如,我有暴露的类图像。它包含Quad和Texture基类的私有实例,我的资源管理器确保始终只加载其中一个(这样我在内存中就不会有重复的纹理/Quad)。
纹理本身具有宽度/高度,并管理加载到卡的数据。Quad也是如此。
Image确保在请求调整图像大小时,它会更改所有需要更改的内容,并将数据重新加载到卡中。
纹理和四边形是公共的,因为它们几乎在任何地方都使用,有模块和一些类可以对其应用效果。
他们(其他程序员)可以使用Image作为实例、继承或成员,因为它可以自己管理,我只想公开这个Image类,所以他们永远不知道有Quad和Texture类,而且它也不会干扰他们的类命名。
第一个(也是最简单的)方法是将库中的所有对象封装在特定的命名空间中。
然后它变得有点复杂。如果您导出的"公共类"只是通过包含使用"内部类",则可以使用前向声明,并保留指向您使用的"私有类"的指针。可以使用皮条习语对行为和属性执行此操作
这里有一个例子:
namespace Foo
{
class BarImpl;
class Bar
{
// ...
private:
std::unique_ptr<BarImpl> object_;
};
}
然而,如果您的"公共类"需要定义您的"私有类"(通过直接包含或继承),那么在不提供对那些支持类的"轻松"访问的情况下,向用户提供库(以源代码形式)并不是一个好方法。
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 结构和双指针隐藏在其他结构中,多层混淆
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 参数包构造函数在类模板中隐藏用户定义的转换
- 如何等待窗口隐藏在Qt中?
- 如何使用类型别名从模板化类中隐藏模板列表
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 名称隐藏对静态函数继承的实例使用
- 在 Linux 中使用 ioctl() 获取隐藏功能报告时,零字节消失
- 从多个模板化基类派生时出现"隐藏重载的虚函数"警告
- 如何在 Omnet++ 5.6.1 中隐藏箭头?
- 在C++中隐藏键盘记录器的控制台窗口
- 从静态库使用时隐藏不透明结构的内容
- 隐藏用于聚合初始化的空基类
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- Qt中的包装连接方法隐藏了编译器所需的信息
- 隐藏重载虚拟功能的模板化访客:SFINAE 在使用?
- 在 ui 文件中隐藏 QTabWidget 中的单个选项卡窗格?
- C++ [错误] 声明'char '隐藏参数。什么意思?
- 如何在不擦除 Windows 上C++中的其他属性的情况下隐藏/取消隐藏文件