C++ OpenGL函数在命名空间gl中的缺点是什么?

C++ OpenGL函数在命名空间gl中的缺点是什么?,c++,opengl,C++,Opengl,我目前正在使用加载OpenGL函数 有一个选项,如将所有函数指针放在名称空间gl 这样我就可以像gl::CreateShader(…) 该功能的缺点是什么 它不会用这些gl**函数或宏污染全局命名空间; 但是我恐怕有一些潜在的缺点…很可能您不想这样做,因为它们将不再遵循普遍使用的C语言绑定命名约定。通过将GL添加到常量的开头和GL添加到函数的开头,整个名称空间问题已经以一种与语言无关的方式得到了解决 你可以自由地做任何你想做的事情,但是像C或C++这样的语言中的全局命名空间已经被链接到的底层库污

我目前正在使用加载OpenGL函数

有一个选项,如将所有函数指针放在
名称空间gl
这样我就可以像
gl::CreateShader(…)

该功能的缺点是什么

它不会用这些gl**函数或宏污染全局命名空间;
但是我恐怕有一些潜在的缺点…

很可能您不想这样做,因为它们将不再遵循普遍使用的C语言绑定命名约定。通过将
GL
添加到常量的开头和
GL
添加到函数的开头,整个名称空间问题已经以一种与语言无关的方式得到了解决


<>你可以自由地做任何你想做的事情,但是像C或C++这样的语言中的全局命名空间已经被链接到的底层库污染了。例如,在Windows上,GL1.1中的所有函数都是使用标准C语言绑定来命名的。这是一组大约400个函数,您可以通过包含平台的OpenGL头来获得这些函数。

很可能您不想这样做,因为它们将不再遵循普遍使用的C语言绑定命名约定。通过将
GL
添加到常量的开头和
GL
添加到函数的开头,整个名称空间问题已经以一种与语言无关的方式得到了解决


<>你可以自由地做任何你想做的事情,但是像C或C++这样的语言中的全局命名空间已经被链接到的底层库污染了。例如,在Windows上,GL1.1中的所有函数都是使用标准C语言绑定来命名的。这是一组大约400个函数,您可以通过包含平台的OpenGL标题获得。

是相关的。我不明白您为什么要使用此选项。您每次都需要键入额外的
,您将无法直接从其他来源复制粘贴总账代码。您说此选项很好,因为它不会污染全局命名空间,但如果所有名称都有正确的前缀,则污染不是问题。@CoryKramer相关,但与glLoadGen不同(取决于选项)。@HolyBlackCat:“您将无法直接从其他源复制粘贴GL代码”这听起来是使用它的一个很好的理由。复制粘贴编码是一件坏事。@NicolBolas你说得对,复制粘贴编码确实是件坏事。但这不是故意使用非常规函数名的正当理由。此外,有时复制粘贴可能很有用:OP可能希望复制并运行带有GL函数调用的代码,只是为了学习它。或者他可能需要从GL文档中复制一个很长的函数名。当然,添加
::
不会花费太多时间,但对我来说,这个选项似乎仍然是不必要的过度复杂。是相关的。我不明白您为什么要使用此选项。您每次都需要键入额外的
,您将无法直接从其他来源复制粘贴总账代码。您说此选项很好,因为它不会污染全局命名空间,但如果所有名称都有正确的前缀,则污染不是问题。@CoryKramer相关,但与glLoadGen不同(取决于选项)。@HolyBlackCat:“您将无法直接从其他源复制粘贴GL代码”这听起来是使用它的一个很好的理由。复制粘贴编码是一件坏事。@NicolBolas你说得对,复制粘贴编码确实是件坏事。但这不是故意使用非常规函数名的正当理由。此外,有时复制粘贴可能很有用:OP可能希望复制并运行带有GL函数调用的代码,只是为了学习它。或者他可能需要从GL文档中复制一个很长的函数名。当然,添加
不会花费太多时间,但对我来说,这个选项似乎仍然是不必要的过度复杂。考虑到与非C语言的各种绑定,我会犹豫是否将此约定称为“通用”。LWJGL为每个OpenGL版本和扩展提供了自己独立的伪名称空间。OpenTK将OpenGL放入
GL
类中,但删除了变得多余的
GL
GL\ucode>前缀。它甚至根据C#约定重命名OpenGL枚举器。既然有很多方法把OpenGL绑定到一个语言上,为什么C++必须遵循C的领导?@尼科尔博拉:别误会我,我很清楚很多很多语言绑定都不符合这个约定。我的观点实际上是通过从C或C++中包含<代码> GL/GL.H./Cube >,你将拥有一组与原始代码> GL*<代码>约定一起被拖动的函数。如果将所有内容分离到它自己的名称空间的意图是简单的,那么在这种情况下,情况正好相反。您需要编写自己的标题,并确保软件的任何部分都不包含平台标题以避免此情况。“您需要编写自己的标题,并确保软件的任何部分都不包含平台标题以避免此情况。”是。这是我在将该功能写入glLoadGen时考虑到的。这是OpenGL加载程序中非常常见的一件事。实际上,所有这些都会阻止您手动包含
gl/gl.h
,如果您在包含标题之前尝试包含该标题,它们将无法工作。甚至GLEW的头球也能做到这一点。这个问题已经解决了。甚至是wgl.h的问题。其实根本不是。以OSX为例,它有
gl.h
gl3.h
,这两个功能是相互排斥的。可以检测两个标题都包含的情况,仅包含
gl.h
的情况,软件的其余部分使用
gl3.h
提供的接口。。。那不是。您可以很容易地使用o