c / expert
Snippet
Kapselung mit Opaque Pointern (ADTs)
Opaque Pointer (oft als 'Handles' oder PIMPL-Idiom bezeichnet) ermöglichen eine vollständige Datenkapselung in C. Indem im Header nur eine Vorwärtsdeklaration bereitgestellt und die Struktur in der Quelldatei definiert wird, können Clients nicht direkt auf interne Felder zugreifen. Dies verbessert die binäre Kompatibilität (ABI), da sich das Layout der Struktur ändern kann, ohne dass Clients neu kompilieren müssen.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
// In header (public interface)typedef struct connection_s* connection_t;connection_t conn_create(const char *url);void conn_send(connection_t c, const char *msg);// In source (implementation details hidden)struct connection_s {int socket_fd;char buffer[1024];bool is_encrypted;};
Erklärung
1
typedef struct connection_s* connection_t;
Deklariert einen Pointer auf einen unvollständigen Typ und verbirgt dessen Struktur vor dem Benutzer.
2
struct connection_s {
Definition innerhalb der .c-Datei; nur für die Implementierungsfunktionen sichtbar.
3
connection_t conn_create(...);
Die öffentliche API gibt das Handle zurück, aber der Benutzer kennt die Größe der zugrunde liegenden Struktur nicht.