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

How to make a library built on top of SDL not require SDL header files

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

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

当我制作我的图书馆时,我 link 与 SDL2.libSDL2main.lib。我将所有 SDL 头文件包含到我的库文件中。当我构建时,它会生成我的库文件; GGL.lib.

但是当我想在另一个项目中测试我的库时,我必须包含所有 SDL 头文件,因为在我项目的 Window.h 中,它包含 SDL.h。我想知道除了 dll.

之外,是否有任何方法可以让我的库头文件独立于 SDL

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

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