Mając funkcja wskaźnik wewnątrz struktury będą użyteczne dla pewnych danych struktury takie jak drzewo wyszukiwania binarnego.
Powiedzmy, chcę wstawić element, którego struktura jest
struct Employee {
int eid;
char *name;
};
do wyszukiwania binarnego drzewa. ale chciałbym, aby BST użył mojej funkcji do porównywania elementów podczas przechowywania i wyszukiwania.
a struktura bst będzie następująca.
struct BST {
struct _node *root;
int (*compare)(void *e1 , void *e2);
};
Teraz będę korzystać z BST w następujący sposób.
int main(void){
struct Emp e1 = { 1, "John" };
struct BST *t = create_tree();
t->set_compare(&compare);
t->insert(e1);
t->get(e1);
...
}
int compare(void *e1 , void *e2)
{
//type cast e1, e2 as struct Emp
// return the comparison result based on id
}
Zaletą widzę jest i nie trzeba trzymać na podaniu tej opcji wskaźnik do moich wszystkich funkcji operacyjnych BST.
ale przechowywanie wszystkich publicznych funkcji wewnątrz struct przyniesie styl OOP wewnątrz kodu C, jak to, co mówią inni.
Zaletą jest to, że każda zmienna typu struct może mieć swoją własną funkcję. W ten sposób możesz mieć mechanizm podobny do polimorfizmu. – Fabien
To jest coś w rodzaju konstruktorów/destruktorów z C++. Również w ten sposób możesz dokonać dziedziczenia. –
To wszystko pusta rozmowa bez konkretnych, praktycznych przykładów kodu. Pokaż kod, który chcesz zrozumieć. –