Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 隐藏OpenGL符号-使用声明_C++_Opengl - Fatal编程技术网

C++ 隐藏OpenGL符号-使用声明

C++ 隐藏OpenGL符号-使用声明,c++,opengl,C++,Opengl,我注意到加载OpenGL函数的库使用宏隐藏符号,例如: 它允许在可能通过不同库链接到OpenGL的更复杂的应用程序中避免冲突。我有一个C++库,它也加载OpenGL符号。我没有使用宏,而是将OpenGL函数指针放在名称空间中,例如: //lib.h #include <GL/gl.h> #include <GL/glext.h> namespace GL { extern PFNGLGENQUERIESPROC glGenQueries; void lo

我注意到加载OpenGL函数的库使用宏隐藏符号,例如:

它允许在可能通过不同库链接到OpenGL的更复杂的应用程序中避免冲突。我有一个C++库,它也加载OpenGL符号。我没有使用宏,而是将OpenGL函数指针放在名称空间中,例如:

//lib.h
#include <GL/gl.h>
#include <GL/glext.h>

namespace GL
{
    extern PFNGLGENQUERIESPROC glGenQueries;
    void load();
}

using GL::glGenQueries;

//lib.cpp
#include "lib.h"
namespace GL
{
    PFNGLGENQUERIESPROC glGenQueries = 0;

    void load()
    {
        glGenQueries = (PFNGLGENQUERIESPROC)glXGetProcAddress((const GLubyte*)"glGenQueries"); 
    }
}
//lib.h
#包括
#包括
名称空间GL
{
外部PFNGLGENQUERIESPROC glGenQueries;
空荷载();
}
使用GL::glgenquerys;
//lib.cpp
#包括“lib.h”
名称空间GL
{
PFNGLGENQUERIESPROC glgenquerys=0;
空荷载()
{
glgenquerys=(pfnglgenqueryesproc)glXGetProcAddress((const GLubyte*)“glgenquerys”);
}
}
对于我使用声明定义的一些OpenGL函数,例如:
使用GL::glGenQueries因为我不想修改使用我的库的库中的代码


使用声明是否会影响隐藏符号,或者我的库中的
glgenquerys
将隐藏在名称空间后面?

不同名称空间中的相同名称不会冲突,即使您使用
使用
使用GL::glgenquerys
只会告诉编译器,当您编写
glgenquerys
时,您的意思是
GL::glgenquerys
。它实际上并没有将函数放在名称空间之外

//lib.h
#include <GL/gl.h>
#include <GL/glext.h>

namespace GL
{
    extern PFNGLGENQUERIESPROC glGenQueries;
    void load();
}

using GL::glGenQueries;

//lib.cpp
#include "lib.h"
namespace GL
{
    PFNGLGENQUERIESPROC glGenQueries = 0;

    void load()
    {
        glGenQueries = (PFNGLGENQUERIESPROC)glXGetProcAddress((const GLubyte*)"glGenQueries"); 
    }
}