我会首先用一个宏来处理这个问题,它将为您定义类型.
#define DEFINE_GRAPH(NAME, WEIGHT_TYPE, VERTEX_TYPE, VERTICES_NUM) \
DEFINE_WEIGHT_TYPE(NAME, WEIGHT_TYPE); \
DEFINE_GRAPH_TYPE(NAME, VERTEX_TYPE, VERTICES_NUM)
#define DEFINE_WEIGHT_TYPE(NAME, WEIGHT_TYPE) \
typedef struct { \
unsigned short isExists : 1; \
WEIGHT_TYPE weight; \
} WEIGHT(NAME)
#define DEFINE_GRAPH_TYPE(NAME, VERTEX_TYPE, VERTICES_NUM) \
typedef struct { \
WEIGHT(NAME) adjacencyMatrix[VERTICES_NUM][VERTICES_NUM]; \
VERTEX_TYPE vertices[VERTICES_NUM]; \
} GRAPH(NAME)
#define WEIGHT(NAME) NAME ## _Weight
#define GRAPH(NAME) NAME ## _Graph
现在,用户可以做如下操作:
DEFINE_GRAPH(Test, char, float, 10);
在他们的代码中,他们会使用这样的数据 struct :
int main () {
GRAPH(Test) g;
/* ... */
}