c++ - 如何使构建在 SDL 之上的库不需要 SDL 头文件

标签 c++ header sdl static-libraries

我真的无法在 Google 或 SO 上找到任何关于此的信息。我不知道是不是因为它不常见,或者因为我使用了错误的术语来搜索。我读了this问题在这里,但它并没有真正回答我的问题。

所以我正在做的是尝试在 SDL 之上为 C++ 构建一个库。现在我似乎无法弄清楚如何使使用我的库的项目完全独立于 SDL 文件,dll 除外。

当我创建我的库时,我链接到 SDL2.libSDL2main.lib。我将所有 SDL 头文件包含到我的库文件中。当我构建时,它会生成我的库文件; GGL.lib.

但是当我想在另一个项目中测试我的库时,我必须包含所有 SDL 头文件,因为在我项目的 Window.h 中,它包含 SDL.h。我想知道是否有任何方法可以让我的库头文件独立于 SDL,dll 除外。

最佳答案

您显然需要避免在库的头文件中包含 SDL 头文件。尽可能将它们包含在源文件中。这消除了冗余依赖并加快了编译过程。但是你想要完全独立,所以如果你不能删除一个 #include 指令,你就失败了。

如果您需要在 header 中声明 SDL 类型的指针(就像通常对 SDL 所做的那样),请前向声明它。然而,该类型对于您图书馆的用户来说仍然是不完整的。如果您的库是面向对象的,可以使用 Pimpl Idiom,它基于相同的原则 - 这会隐藏所有内容。

关于c++ - 如何使构建在 SDL 之上的库不需要 SDL 头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33639699/

相关文章:

c++ - 创建购物车

c++ - 带有 unique_ptr 的前向声明?

c++ - 多维稀疏矩阵压缩

c++ - 是否可以覆盖头文件中结构的 c++ operator<<?

c++ - 虚函数错误(vtable?)

c++ - SDL 运动停止

c++ - SDL - 不加载图像

c++ - 如何独立检查多个变量?

android - ListView 和 RecyclerView 标题项

c++ - 游戏运行几分钟后 SDL_Surface 消失?