У меня есть две функции:с функцией слияния помощь
void free_this(THIS *this)
{
THIS *this_tmp;
while (this_tmp = this)
{
if (this->str)
free(this->str);
this = this_tmp->next;
free(this_tmp);
}
}
void free_that(THAT *that)
{
THAT *that_tmp;
while (that_tmp = that)
{
if (that->id)
free(that->id);
that = that_tmp->next;
free(that_tmp);
}
}
Поскольку они очень похожи, я пытался придумать одну функцию, чтобы справиться с ними обоими. Я уже могу просто использовать указатель, чтобы указывать на правильные данные на бесплатную (т. Е. Указывать либо на str из этой структуры, либо на идентификатор структуры THAT), но я не могу понять, как обойти, с какими типами структура обрабатывается поскольку я не могу просто использовать указатель void, поскольку void * не имеет члена с именем «NEXT».
Любые идеи?
Возможно, мне нужно как-то объединить две структуры THIS и THAT? вот они:
typedef struct this {
struct this *next;
char *str;
} THIS;
typedef struct that {
struct that *next;
char *id;
unsigned short result;
OTHERTHING *optr;
} THAT;
Могу ли я использовать функцию offsetof как-то, чтобы получить следующий элемент?
Если вы использовали компилятор C++, здесь будут полезны шаблоны C++. – DaMacc