Как можно писать общие c?Generic C для двоичных деревьев
Я начал писать коллекцию сбалансированных деревьев (scapegoat, splay, aa и т. Д.) И найти много общего. Пример - функция destroy, найденная ниже.
Может ли такая функция и аналогичная быть определена с помощью указателей void, не вызывая «ошибки указателя void * указателя»?
Пример уничтожить функцию
void splay_node_linked_destroy(SplayNode **this) {
72 if(*this == NULL) {
73 return;
74 }
75 SplayNode *root = (*this)->root, *previous, *next;
76 while(root) {
77 if(previous == root->parent) {
78 // todo use funcs for comparisons for generic
79 if(root->left) {
80 next = root->left;
81 } else if(root->right) {
82 next = root->right;
83 } else {
84 next = root->parent;
85 }
86 } else if(previous == root->left) {
87 if(root->right) {
88 next = root->right;
89 } else {
90 next = root->parent;
91 }
92 } else {
93 next = root->parent;
94 }
95 previous = root;
96 if(next == root->parent) {
97 splay_node_destroy(&root);
98 // todo use callback here to make generic
99 }
100 root = next;
101 }
102 }
Вообще, к сожалению, ответ отрицательный. По крайней мере, в стандарте C, и если вы не используете UB ... – Mints97