如何使构建在 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.lib
和 SDL2main.lib
。我将所有 SDL 头文件包含到我的库文件中。当我构建时,它会生成我的库文件; GGL.lib
.
但是当我想在另一个项目中测试我的库时,我必须包含所有 SDL 头文件,因为在我项目的 Window.h
中,它包含 SDL.h
。我想知道除了 dll
.
之外,是否有任何方法可以让我的库头文件独立于 SDL
您显然需要避免在库的 header 文件中包含 SDL header 文件。尽可能将它们包含在源文件中。这消除了冗余依赖并加快了编译过程。但是你想要完全独立,所以如果你不能删除一个 #include
指令,你就失败了。
如果您需要在 header 中声明 SDL 类型的指针(就像通常使用 SDL 所做的那样),请转发声明它。然而,该类型对于您图书馆的用户来说仍然是不完整的。如果您的图书馆是 object-oriented,则有 Pimpl Idiom,它基于相同的原则 - 这会隐藏所有内容。
我在 Google 上找不到任何关于此的信息。我不知道是不是因为它不常见,或者因为我使用了错误的术语来搜索。我在这里阅读了 this 问题,但它并没有真正回答我的问题。
所以我正在做的是尝试在 SDL 之上为 C++ 构建一个库。现在我似乎无法弄清楚的是如何使使用我的库的项目完全独立于 SDL 文件,除了 dll
.
当我制作我的图书馆时,我 link 与 SDL2.lib
和 SDL2main.lib
。我将所有 SDL 头文件包含到我的库文件中。当我构建时,它会生成我的库文件; GGL.lib
.
但是当我想在另一个项目中测试我的库时,我必须包含所有 SDL 头文件,因为在我项目的 Window.h
中,它包含 SDL.h
。我想知道除了 dll
.
您显然需要避免在库的 header 文件中包含 SDL header 文件。尽可能将它们包含在源文件中。这消除了冗余依赖并加快了编译过程。但是你想要完全独立,所以如果你不能删除一个 #include
指令,你就失败了。
如果您需要在 header 中声明 SDL 类型的指针(就像通常使用 SDL 所做的那样),请转发声明它。然而,该类型对于您图书馆的用户来说仍然是不完整的。如果您的图书馆是 object-oriented,则有 Pimpl Idiom,它基于相同的原则 - 这会隐藏所有内容。