【发布时间】:2016-03-13 03:59:35
【问题描述】:
我正在为我的一些朋友开发一个小型游戏引擎,并且我正在使用 OpenGL(以及 GLFW 和 GLEW 以及所有这些东西)进行渲染。您可能知道,OpenGL 是一个 C 库,因此不包含类。现在,我不希望我的朋友(或我自己)看到来自 glfw3.h 和 glew.h 的所有 gobbledygook,我想知道是否有一种简单的方法可以向用户隐藏此类内容。
我知道在很多情况下,在这种情况下可能会尝试 pimpl,但问题是,我所拥有的只是函数。我可以将它们全部放在一个静态类或命名空间中,然后由必要的类包含,但这仍然不会对用户隐藏这些功能。我唯一想到的就是函数指针的奇怪和麻烦,但我会经常使用这些函数,以至于它会减慢开发速度。
最后,我想如果像glVertexAttribPointer 这样的可怕东西是可见的,那也不会很糟糕,但这只是我想要的东西。提前致谢。
【问题讨论】:
-
您是否尝试过在库的头文件中不包含
GL.h? -
@Dolda2000 好吧,如果我实际使用
gl.h,那会起作用,但是所有这些功能都来自glfw3.h,我经常在我的课程中用作私有成员的类型。然而,这是一个有趣且明显的点,我根本没有考虑过。我只是不知道如何将glfw3.h中的OpenGL相关函数与GLFW相关函数分开。 -
使用 PIMPL 成语:stackoverflow.com/questions/60570/…。基本上也使用 GL 标头将内容隐藏在用户的视线之外。
-
@user4581301 如果 glfw/opengl 不是该死的 C 库,这也可以工作。无论如何,这将禁止用户使用方便的类,例如
engine::Window,因为该类需要GLFWwindow成员,该成员位于glfw3.h中,所有OpenGL 函数也都在其中。我想我可以编辑头文件,但这并不是最好的主意……不过还是感谢您的建议。gl类结合 pimpl 可以工作;只是有点痛苦 -
是否是 C 库无关紧要。客户端只能看到未在标头中定义的前向定义的 PIMPL 类和指向前向定义的 PIMPL 类的指针。这个 PIMPL 类的实现隐藏在 CPP 文件中的公共视图之外,并包装了所有需要的 C 功能。只有 CPP 文件需要包含 C 头文件并了解有关 C 库的任何信息。您的所有其他类都调用 PIMPL 类,可能使用前向定义和不向客户端公开的标头。