Có chức năng con trỏ bên trong struct sẽ hữu ích cho dữ liệu nhất định các cấu trúc như cây tìm kiếm nhị phân.
phép nói rằng, tôi muốn chèn một phần tử có cấu trúc là
struct Employee {
int eid;
char *name;
};
thành một cây tìm kiếm nhị phân. nhưng tôi muốn BST sử dụng chức năng của tôi để so sánh các phần tử trong khi lưu trữ và tìm kiếm.
và cấu trúc bst sẽ như sau.
struct BST {
struct _node *root;
int (*compare)(void *e1 , void *e2);
};
Bây giờ, tôi sẽ sử dụng BST như sau.
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
}
Lợi thế tôi thấy là tôi không cần phải chuyển con trỏ hàm này vào tất cả các chức năng hoạt động BST của tôi.
nhưng lưu trữ tất cả các chức năng công khai bên trong cấu trúc sẽ mang phong cách OOP bên trong mã C, giống như những gì người khác nói.
Lợi thế là mỗi biến của loại cấu trúc có thể có chức năng riêng của nó. Bằng cách đó, bạn có thể có một cơ chế giống đa hình. – Fabien
Đây là một cái gì đó giống như constructors/destructor từ C++. Cũng bằng cách này bạn có thể làm cho thừa kế. –
Đó là tất cả nói chuyện rỗng mà không có bê tông, ví dụ thực tế của mã. Hiển thị một số mã bạn muốn hiểu. –