WSKAŹNIKI NA FUNKCJE 125 /* kod...*/ } void moje_urzadzenie_zamknij (void) { /* kod... */ } int rejestruj_urzadzenie(struct urzadzenie &u) { /* kod... */ } int init (void) { struct urzadzenie moje_urzadzenie; moje_urzadzenie.otworz = moje_urzadzenie_otworz; moje_urzadzenie.zamknij = moje_urzadzenie_zamknij; rejestruj_urzadzenie(&moje_urzadzenie); } W ten sposób w pamięci każda klasa musi przechowywać wszystkie wskaźniki do wszyst- kich metod . Innym rozwiązaniem może być stworzenie statycznej struktury ze wskaźnikami do funkcji i wówczas w strukturze będzie przechowywany jedynie wskaźnik do tej struktury, np.: struct urzadzenie_metody { int (*otworz)(void); void (*zamknij)(void); }; struct urzadzenie { const struct urzadzenie_metody *m; } int moje_urzadzenie_otworz (void) { /* kod...*/ } void moje_urzadzenie_zamknij (void) { /* kod... */ } static const struct urzadzenie_metody moje_urzadzenie_metody = { moje_urzadzenie_otworz, moje_urzadzenie_zamknij }; int rejestruj_urzadzenie(struct urzadzenie &u) { /* kod... */ } int init (void)
... zobacz całą notatkę
Komentarze użytkowników (0)