gl.h - 如何隐藏函数原型

Posted

技术标签:

【中文标题】gl.h - 如何隐藏函数原型【英文标题】:gl.h - how to hide function prototypes 【发布时间】:2021-02-26 12:44:21 【问题描述】:

我在 Linux 上工作。有一个包含 gl.h 的遗留 OpenGL 应用程序。我想定义一个函数指针来存储 glXGetProcAddress 结果:

typedef void (GLACTIVETEXTUREARB)(GLenum texture);
extern GLACTIVETEXTUREARB glActiveTextureARB;

但我收到以下错误:将 glActiveTextureARB 重新定义为不同类型的符号,之前的定义:gl.h:1966

我必须包含 gl.h,因为它包含基本类型定义,例如 GLenum。如何隐藏该函数原型? glext.h 基于 GL_GLEXT_PROTOTYPES 定义函数原型,但 gl.h 不使用它。

【问题讨论】:

不知道它是否适用于这个特定问题,但您也可以尝试定义GL_GLEXT_LEGACYGLX_GLXEXT_LEGACY宏以避免Linux头文件无意包含系统提供的glext.h跨度> GL_GLEXT_LEGACY 在这里不适用 如果这是针对 C++ 的,那么使用命名空间怎么样? C,可惜系统gl.h没有提供像GL_GLEXT_PROTOTYPES这样的选项 【参考方案1】:

使用define重写原来的名字:

#define glActiveTextureARB glh__glActiveTextureARB
#include<gl.h>
#undef glActiveTextureARB

顺便说一句,你的gl.h 可能已经将PFNGLACTIVETEXTUREARBPROC 定义为你想要的函数指针类型,所以你不需要重新定义它。

【讨论】:

以上是关于gl.h - 如何隐藏函数原型的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象

理解js中是原型链? 如何实现继承?

原型链、constructor和prototype图文详解

JS原型对象的问题

js面向对象之原型链

JavaScript 中原型继承(prototype-based inheritance)的原理是怎样的?