如果两个结构具有固有相同的结构,则取消一个结构定义

时间:2014-05-04 18:28:19

标签: c

我有两个具有相同结构的物理实体。处理这种情况的理想方式是什么。

例如:

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)。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果你真的希望它们是同一类型,你可以使用两个typedef:

struct g_vector { /* ... */ };
typedef struct g_vector graph_vector;
typedef struct g_vector group_vector;

如果您希望将类型称为struct graph_vectorstruct group_vector,而不是仅仅使用单个标识符,那么就没有真正干净的方法({{1} }和struct foo总是不同的类型) - 但你可以使用预处理器:

struct bar

另一方面,你应该考虑你是否真的希望它们是同一类型。它们有不同的名称,所以它们显然对你有不同的含义;否则你会定义一种类型。是否会有可以对任何一种类型的对象进行操作的代码?如果没有,请保持不同。

如果你想在某些情况下将它们视为不同的类型,但在其他情况下作为相同的类型,这有点棘手。您可以将它们定义为相同类型,并且要小心不要在需要它们的情况下混淆操作(这样会丢失一些编译时类型检查)。或者您可以将它们定义为不同的类型,并使用struct g_vector { /* ... */ }; #define graph_vector g_vector #define group_vector g_vector 实现常用功能。 (或者,您可以从C切换到C ++,并使用类继承从公共父类型派生它们。)