我的图书馆界面是否可以看到内部库类型?

时间:2014-05-26 13:53:42

标签: c++ opengl interface

我正在为OpenGL编写一个包装器。 OpenGL有许多类型(typedef使其更具可移植性),并且需要花费大量精力才能将其隐藏在我的库界面中。如果我用一个unsigned int替换每次出现的GLuint,似乎这会从可移植性中消失。

然而,Qt的OpenGL包装器就是这样做的。这样做有什么不对吗?通过我的界面公开这些类型有什么问题吗?

Qt文件,正如您所看到的,许多基本类型(如GLuint和GLint)被内置类型替换(static_casts在将这些内置类型发送到OpenGL函数时使用,但这违背了目的首先是typedef。)

https://qt.gitorious.org/qt/qtbase/source/3232682d3b04ff16806fd8c5ad36271876a7b419:src/gui/opengl/qopengltexture.cpp#L256

1 个答案:

答案 0 :(得分:1)

这里没有明确的正确或错误的解决方案。恕我直言,这取决于你的图书馆的目标是什么:

  • 您的库使OpenGL的使用变得更加方便,但是库的客户端仍然可以完全意识到他们正在使用OpenGL。如果这是你的目标,我不认为暴露OpenGL类型有什么不妥。相反,如果客户端也将直接进行OpenGL调用而不通过您的库,那么您的库中显示的单独类型会使您的库的使用更加尴尬。

  • 您正在构建一个隐藏OpenGL使用的抽象层。图书馆的客户不会知道他们正在使用OpenGL。例如,您可以创建库的DirectX实现,客户端不会注意到差异。如果这是您的目标,则需要隐藏OpenGL类型。您可以定义与OpenGL类型大小相匹配的自己的类型,例如使用stdint类型(例如typedef uint16_t BenUShort),并在库的界面中公开这些类型。

    < / LI>