我有两个具有相同结构的物理实体。处理这种情况的理想方式是什么。
例如:
struct graphlet_vector {
int a;
int* data;
}
struct group_vector {
int a;
int *data;
}
组向量被定义为在一定范围内的聚合的图基元向量,因此该结构在一段时间内必然保持相同。因此,对同一事物有两种结构似乎是多余的。
我不能使用这样的东西:
typedef struct graphlet_vec struct group_vec
(虽然以下工作正常:typedef struct graphlet_vec group_vec
)。
有什么建议吗?
答案 0 :(得分:0)
如果你真的希望它们是同一类型,你可以使用两个typedef:
struct g_vector { /* ... */ };
typedef struct g_vector graph_vector;
typedef struct g_vector group_vector;
如果您希望将类型称为struct graph_vector
和struct group_vector
,而不是仅仅使用单个标识符,那么就没有真正干净的方法({{1} }和struct foo
总是不同的类型) - 但你可以使用预处理器:
struct bar
另一方面,你应该考虑你是否真的希望它们是同一类型。它们有不同的名称,所以它们显然对你有不同的含义;否则你会定义一种类型。是否会有可以对任何一种类型的对象进行操作的代码?如果没有,请保持不同。
如果你想在某些情况下将它们视为不同的类型,但在其他情况下作为相同的类型,这有点棘手。您可以将它们定义为相同类型,并且要小心不要在需要它们的情况下混淆操作(这样会丢失一些编译时类型检查)。或者您可以将它们定义为不同的类型,并使用struct g_vector { /* ... */ };
#define graph_vector g_vector
#define group_vector g_vector
实现常用功能。 (或者,您可以从C切换到C ++,并使用类继承从公共父类型派生它们。)