避免使用Windows标头

时间:2014-07-04 18:51:37

标签: c++ windows directx

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

这是一个体积适中的项目,如果可能的话,我宁愿避免将windows标题暴露给项目的其余部分。有没有什么好方法可以绕过这个问题?

1 个答案:

答案 0 :(得分:2)

只有一种实用的方法可以避免暴露实现代码所需的标头,并且只在实现中包含标头。

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

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


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


另一种选择,但是你可能会遇到线程安全问题,就是提供对静态状态变量进行操作的函数。即单身,全球。是的,这听起来很糟糕(即使整个编程语言,Modula-2都基于这个想法),但它肯定是一种技术选择,在某些情况下可能更好。