Späte (AKA Dynamische) Bindung hat nichts mit dynamisch geladenen Modulen zu tun (worüber sich dlopen und dlsym überhaupt sprechen). Stattdessen wird die Entscheidung, welche Funktion aufgerufen wird, bis zur Laufzeit verzögert.
In C wird dies mit Funktionszeigern gemacht (was auch praktisch jede C++ - Implementierung für virtuelle Funktionen tut).
Eine Möglichkeit, dies zu emulieren, besteht darin, Strukturen von Funktionszeigern herumzugeben und dann nur Funktionen über die gegebenen Funktionszeiger aufzurufen.
Ein Beispiel:
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;
}
Ich denke, dass Frerich gut gemacht hat, indem er erklärt hat, was das Konzept der späten/dynamischen Bindung * eigentlich * bedeutet. –
Ja, er hat es sehr gut gemacht. Ich habe gerade einen Anwendungsfall erwähnt. –
Gemeinsame Bibliothek Verknüpfung ist auch eine Art der Abstraktion. Auf diese Weise kann die Implementierung/das Verhalten der gemeinsam genutzten Bibliothek bis zur Ausführungszeit der Anwendung variieren. – shuva