c++ - 避免窗口标题

标签 c++ windows directx

<分区>

我在制作游戏引擎 + 游戏时同时使用 win32 和 directx。 Win32 直接需要窗口 header ,directx header 也包含它。

这是一个规模适中的项目,如果可能,我宁愿避免将 Windows header 暴露给项目的其余部分。有什么好的方法可以绕过这个问题吗?

最佳答案

只有一种实用的方法可以避免暴露您的实现代码所需的 header ,那就是仅在实现中包含 header 。

这就是所谓的编译器防火墙习惯用法。

通常(但这并不总是必需的)人们会公开一个类,该类的成员指针指向已声明但不完整类型的对象,该类型仅在实现文件中定义。这通常称为 PIMPL , pointer to implementation 的缩写,成语,但它也被称为 the handle-body idiom and the Cheshire Cat idiom .


PIMPL 指针的一种替代方法是在头文件中声明一个工厂函数,其中该工厂函数生成某种已知类型Base 的对象,并在实现中文件让它生成派生类型 Derived 的对象,该对象包含对不需要的 header 的依赖项。


另一种可能会遇到线程安全问题的方法是只提供对静态变量进行操作的函数。 IE。一个单例,一个全局。是的,这听起来很糟糕(尽管整个编程语言 Modula-2 都是基于这个想法),但它确实是一种技术选择,并且在某些情况下可能更可取。

关于c++ - 避免窗口标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579583/

相关文章:

c++ - MFC 资源/链接

windows - 使用 Windows SetupAPI 获取 USB 设备描述符

Java NIO 和 Windows 磁盘访问

c++ - 强制闭源应用程序使用 Direct3DDevice9Ex 而不是非 Ex 设备

c++ - LNK2001 和 LNK2019 错误 - DirectX 未解析的外部符号

c++ - 运动代码c++

c++ - 请求 "..."中的成员 "..."属于非类类型 "..."

c++ - 声明一个具有四个键值的多重映射

c++ - 为什么在gtkmm中使用CellRenderer时TreeView中的信息显示两次

windows - 防止 HTML5 视频禁用屏幕保护程序