我有一些与'list'数据结构相关的C结构.它们看起来像这样.
struct nmlist_element_s {
void *data;
struct nmlist_element_s *next;
};
typedef struct nmlist_element_s nmlist_element;
struct nmlist_s {
void (*destructor)(void *data);
int (*cmp)(const void *e1, const void *e2);
unsigned int size;
nmlist_element *head;
nmlist_element *tail;
};
typedef struct nmlist_s nmlist;
Run Code Online (Sandbox Code Playgroud)
这样我就可以在"nmlist_element-> data"中保存不同的数据类型."构造函数"(以OOP表示)具有以下签名:
nmlist *nmlist_alloc(void (*destructor)(void *data));
Run Code Online (Sandbox Code Playgroud)
其中"析构函数"是取消分配"数据"的特定函数(由nmlist_element保存).
如果我想要一个包含整数作为数据的列表,我的"析构函数"会这样:
void int_destructor(void *data)
{
free((int*)data);
}
Run Code Online (Sandbox Code Playgroud)
我仍然觉得为每个简单的原始数据类型编写析构函数对我来说是"不友好的".那么写一些这样的东西有诀窍吗?(对于原语):
void "x"_destructor(void *data, "x")
{
free(("x" *)data);
}
Run Code Online (Sandbox Code Playgroud)
PS:我自己并不是一个宏观迷,在我对C的短暂体验中,除非必要,否则我不会使用它们.
| 归档时间: |
|
| 查看次数: |
744 次 |
| 最近记录: |