我试图模拟"模板" C 中的样式行为,作为将代码从cpp重构为C的练习的一部分。 我通过像这样定义结构来构建 MACRO方法:
#define FIFO(TYPE, depth, NAME) \
typedef struct fifo_##TYPE##NAME \
{ \
TYPE array[depth]; \
uint8 st_idx; \
uint8 end_idx; \
uint32 cnt; \
}fifo_##TYPE##NAME; \
void fifo_##TYPE##NAME_init(fifo_##TYPE##NAME *f); \
int fifo_##TYPE##NAME_push(fifo_##TYPE##NAME *f, TYPE *elem); \
TYPE* fifo_##TYPE##NAME_pop(fifo_##TYPE##NAME *f); \
TYPE* fifo_##TYPE##NAME_peek(fifo_##TYPE##NAME *f); \
然后我为上面显示的原型定义了MACRO函数。 与模板方法相比,这实际上增加了我的代码大小,因为每个TYPE都定义了每个函数。
我现在尝试使用 void * 方法而不是MACRO。我仍然使用上面的MACRO结构定义,但我没有定义MACRO功能。我在.h文件中使用普通的内联函数,但我仍然坚持如何通过void * ptr访问泛型TYPE结构的成员。我可以将它投入哪种类型?如果结构的名称按TYPE更改,我没有明确的结构类型将其强制转换为。此外,MACRO不会在非宏功能中工作。
对于这个措辞感到抱歉! 感谢。