【发布时间】:2020-05-13 09:40:15
【问题描述】:
我有一个存储固定大小(15)和固定类型(整数)的结构。
typedef struct Queue Queue;
struct Queue
{
int buffer[15]; //only store 15 integer
int head;
int space;
int tail;
int (*isFull)(Queue_int* const me);
int (*isEmpty)(Queue_int* const me);
int (*getSize)(Queue_int* const me);
void (*insert)(Queue_int* const me, int k); //insert integer only
int (*remove)(Queue_int* const me);
};
我想写一个通用的队列库。换句话说,任何类型和任何大小的队列结构。
我尝试使用宏来解决这个问题。也就是我为其他接口创建了一个通用接口。
/*queue.h*/
#define Queue_Define(type, size)\
typedef struct Queue_##type Queue_##type;\
struct Queue_##type \
{ \
type buffer[size]; \
int head; \
int space; \
int tail; \
int (*isFull)(Queue_##type* const me); \
int (*isEmpty)(Queue_##type* const me); \
int (*getSize)(Queue_##type* const me); \
void (*insert)(Queue_##type* const me, type k); \
int (*remove)(Queue_##type* const me); \
}\
但后来我遇到了另一个问题,客户端不知道如何使用 queue.h,因为结构名称是由宏创建的,而不是客户端本身。
例如:
/*queue_employee.h*/
#include "queue.h"
Queue_Define(employee, 15);
void Queue_employee_Init
(
Queue_employee* const me, //oops! how do client know struct name is Queue_employee?
int (*isFullfunction)(Queue_employee* const me), //ditto
int (*isEmptyfunction)(Queue_employee* const me), //ditto
int (*getSizefunction)(Queue_employee* const me), //ditto
void (*insertfunction)(Queue_employee* const me, employee k), //ditto
int (*removefunction)(Queue_employee* const me) //ditto
);
有什么建议吗?
【问题讨论】:
-
请问:这是为了什么任务?
-
@Ackdari 你说的分配是什么意思?我学会了优秀的程序员编写优秀的库,我想成为一名优秀的程序员。就是这样。
-
@AndyLin 他的意思是家庭作业。
-
@Jabberwocky 不。这不是家庭作业。
-
我真的不明白,为什么你不尝试直接在头文件中创建结构,而是使用宏?然后,在 main 中创建 struct 对象,并将它的指针传递给带有所需参数的函数
标签: c templates generics queue polymorphism