我有兩個功能:c函數合併幫助
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);
}
}
因爲他們都非常相似,我試圖想出一個函數來處理他們。我已經可以使用一個指針指向正確的數據以釋放(例如指向THIS結構中的任何一個str或THAT結構的id),但我無法弄清楚如何解決正在處理的結構類型因爲我無法使用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 2009-12-01 17:06:36