我希望能够做这样的事情:

void test();
void (*testPointer)() = SomethingThatReturnsAFunctionPointer();
test = testPointer;


我想做一些功能类似于实现openGL标头的方法,在该方法中声明函数原型,然后将函数设置为指针。换句话说,我想知道一些openGL头文件如何既可以加载openGL函数,又可以同时具有这些函数的原型。

最佳答案

函数不是变量;函数不是变量。他们不能被分配给。

但是,可以将函数隐式转换为指向这些函数的指针。函数本身仍然不是变量,但是您可以将该函数指针分配给为该函数指针适当键入的变量。


  我想知道一些openGL头文件如何既可以加载openGL函数,又可以同时具有这些函数的原型。


我不知道您要说的是哪个特定的标头,但是the loader I created只是简单地实现了函数的调用函数指针,将所有参数传递给它并返回其值(如果有)。指针是在源文件中定义的,因此不在头文件中。

使用您的示例:

//header
void test();

//source file
void (*testPointer)();

void test()
{
  testPointer();
}


您甚至可以看中和make test load the pointer

//source file
void (*testPointer)() == NULL;

void test()
{
  if(!testPointer)
  {
    testPointer = SomethingThatReturnsAFunctionPointer();
  }
  testPointer();
}

10-08 06:53