#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int divide(int a, int b)
{
return a / b;
}
int main(int argc, char** argv)
{
int input;
printf("main - please enter your choice of operation:1 - add, 2 - substruct, 3 - mulitply, 4 - division\n");
scanf("%d", &input);
int (*funcPointer)(int, int);
int a = 6, b = 2;
switch(input)
{
case 1: funcPointer = &add;
break;
case 2: funcPointer = ⊂
break;
case 3: funcPointer = &mul;
break;
case 4: funcPointer = ÷
break;
}
printf("main - running the desired function\n");
// this is where LATE binding takes place
int res = (*funcPointer)(a, b);
printf("main - result of the desired function is:%d\n", res);
// this is where EARLY binding takes place
res = divide(a, b);
printf("main - result of the divide function is:%d\n", res);
return 0;
}
3条答案
按热度按时间ujv3wf0j1#
后期绑定(也称为动态绑定)与动态加载的模块(这就是
dlopen
和dlsym
的含义)本身没有任何关系。相反,它是关于将调用哪个函数的决定延迟到运行时。在C中,这是使用函数指针完成的(这也是几乎所有C++实现对虚函数的实现方式)。
模拟这种情况的一种方法是传递函数指针的结构,然后只通过给定的函数指针调用函数。
一个例子:
字符串
ocebsuys2#
@Frerich Raabe:基本的后期绑定机制可以像你说的那样实现,但是你可以使用dlopen/dlclose/dlsym和指向函数的指针的组合来获得类似这样的东西:
字符串
我想这就是本杰明·巴顿要找的东西
r7knjye23#
正如Frerich Raabe提到的,这一切都是关于延迟调用什么函数的决定,就是这样。
为了强调它是C/C++中的一种通用机制,我喜欢考虑下面的纯C(和C风格的编码,即不存在任何“OO概念”),以掌握早期/晚期绑定的概念:
字符串