我正在为OpenGL编写一个包装器。 OpenGL有许多类型(typedef使其更具可移植性),并且需要花费大量精力才能将其隐藏在我的库界面中。如果我用一个unsigned int替换每次出现的GLuint,似乎这会从可移植性中消失。
然而,Qt的OpenGL包装器就是这样做的。这样做有什么不对吗?通过我的界面公开这些类型有什么问题吗?
Qt文件,正如您所看到的,许多基本类型(如GLuint和GLint)被内置类型替换(static_casts在将这些内置类型发送到OpenGL函数时使用,但这违背了目的首先是typedef。)
答案 0 :(得分:1)
这里没有明确的正确或错误的解决方案。恕我直言,这取决于你的图书馆的目标是什么:
您的库使OpenGL的使用变得更加方便,但是库的客户端仍然可以完全意识到他们正在使用OpenGL。如果这是你的目标,我不认为暴露OpenGL类型有什么不妥。相反,如果客户端也将直接进行OpenGL调用而不通过您的库,那么您的库中显示的单独类型会使您的库的使用更加尴尬。
您正在构建一个隐藏OpenGL使用的抽象层。图书馆的客户不会知道他们正在使用OpenGL。例如,您可以创建库的DirectX实现,客户端不会注意到差异。如果这是您的目标,则需要隐藏OpenGL类型。您可以定义与OpenGL类型大小相匹配的自己的类型,例如使用stdint
类型(例如typedef uint16_t BenUShort
),并在库的界面中公开这些类型。