Vij*_*jay 5 c unix late-binding
如何用c语言实现后期绑定?任何人都可以提供一个例子.
我认为可以使用dlopen和dlsym来实现,但我不确定它.如果我错了,请纠正我!
Fre*_*abe 15
Late(AKA Dynamic)Binding与动态加载的模块(这是dlopen和dlsym的内容)本身没有任何关系.相反,它是关于延迟决定在运行时调用哪个函数.
在C中,这是使用函数指针完成的(这也是几乎任何C++实现为虚函数执行的操作).
模拟这种方法的一种方法是传递函数指针的结构,然后只通过给定的函数指针调用函数.
一个例子:
typedef struct Animal {
void (*sayHello)(struct Animal *a, const char *name);
} Animal;
static void sayQuakQuak( Animal *a, const char *name ) {
printf( "Quak quak %s, says the duck at 0x%x!\n", name, a );
}
/* This function uses late binding via function pointer. */
void showGreeting( Animal *a, const char *name ) {
a->sayHello( a, name );
}
int main() {
struct Animal duck = {
&sayQuakQuak
};
showGreeting( &duck, "John" );
return 0;
}
Run Code Online (Sandbox Code Playgroud)