C中的后期绑定

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)