Так что у меня возникли проблемы с выяснением того, как преодолеть это.Повторное использование такого же c ADT для других типов
Возьмет, к примеру, у меня есть красная черная реализация дерева, которое работает с предметами:
typedef unsigned long int Key;
struct rbt_node{
Item item;
int color;
Key key;
struct rbt_node* parent;
struct rbt_node* left;
struct rbt_node* right;
};
затем в Item.hi определяет структуру Я буду использовать, например:
typedef struct _something* Item;
Таким образом я развязываю Предмет, удерживаемый из реализации дерева. Проблема возникает, если я хочу повторно использовать ADT для других типов.
На данный момент мне нужно будет определить Item2.h и скопировать rbt.c/rbt.h в rbt2.c/rbt2.h и изменить их для использования Item2.h и сменить имена функций. Разве нет более чистого пути?
Я нашел это C double linked list with abstract data type, но он, похоже, имеет некоторые проблемы в зависимости от архитектуры и размера структур, которые я не очень хорошо осведомлен.
Я ищу такого использования:
rbt_insert(rbt_of_something, something);
rbt_insert(rbt_of_somethingElse, somethingElse);
Благодаря
С некоторыми файлами заголовков и препроцессором вы можете имитировать шаблоны. – leppie
В самом последнем ответе на вопрос, который вы связали с собой, вы найдете ссылки на то, как это делается в ядре linux. Я думаю, что это очень хорошо читается для этого типа стратегий. –
@Jens Gustedt Это выглядит интересным и отличным ресурсом, я должен посмотреть. Спасибо – GriffinHeart