我希望能够做到这样的事情:
void test();
void (*testPointer)() = SomethingThatReturnsAFunctionPointer();
test = testPointer;
我想创建一些功能类似于实现openGL头的方式,其中声明了函数原型,然后将函数设置为指针。换句话说,我想知道一些openGL头文件如何能够加载openGL函数,并同时拥有函数的原型。
答案 0 :(得分:1)
函数不是变量;他们不能被分配到。
但是,函数可以隐式转换指向这些函数的指针。函数本身仍然不是变量,但是您可以将该函数指针指定给适合该函数指针的变量。
我想知道一些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();
}
答案 1 :(得分:0)
第一
int aplusb(int a, int b){return a + b;}
int aminusb(int a, int b){return a - b;}
int (*func)(int a, int b) = aplusb;
int some_func_caller ( int A, int B, int (*func)(int a, int b)){
return func(A, B);
}
int main(){
int a_ =10, b_ = 7;
int res1 = func(a_, b_);
int res2 = somefunc_caller(a_, b_, aminusb);
return 0;
}
第二名:
(如果您使用的是c ++编译器)
typedef int MyFuncionType(int a, int b);
typedef int (*MyFuncionType2)(int a, int b);
int aplusb(int a, int b){return a + b;}
int aminusb(int a, int b){return a - b;}
int some_function_caller1(int a, int b, MyfunctionType fc){return fc(a,b);}
int some_function_caller2(int a, int b, MyfunctionType2 fc){return fc(a,b);}
int main(){
int a_ = 10, b_ = 7;
MyFunctionType *func1 = aminusb, *func2 = nullptr;
MyFunctionType2 func3 = aplusb, func4 = nullptr;
int res1 = func1(a_, b_);
int res2 = func3(a_, b_);
int res3 = some_function_caller1(a_, b_, aplusb);
int res4 = some_function_caller2(a_, b_, aminusb);
return 0;
}