这是在C.我有一个句柄,我在许多文件中使用(我们称之为type_handle
),目前是enum
,但目前我需要扩展它以支持typedef-ed struct(也称为my_type
)。由于许多函数将type_handle
作为输入参数,我不想主要更改设计,因此我需要重做所有文件。所以我的想法是通过int
,float
,double
,然后my_type
。我想要一些我想要的所有类型的union
函数,这样我就不需要修改type_handle
的函数了。我该如何设计呢?
typedef enum
{
INT = MPI_INT,
INT8 = MPI_INT8_T,
INT16 = MPI_INT16_T
}
types_t;
typedef union {
my_type dtype;
types_t etype;
} type_handle;
我希望以any_func(type_handle type)
可以接受any_func(INT)
以及any_func(dtype)
的方式设计它,其中dtype表示类型为my_type
的派生数据类型。
答案 0 :(得分:1)
在C中使用union
时,您需要一些方法来了解要使用的成员。 C本身无法告诉您union
中哪个元素是您指定的元素。这将是令人困惑的解释,因为你已经在处理类型,但成语将是:
struct {
what_is_in_the_union_t what;
union {
type_a a;
type_b b;
...
} u;
};
其中what_is_in_the_union_t
是您自己的{ TYPE_A, TYPE_B, ... }
枚举。正如我所说,这将在您的示例中以一种令人困惑的方式扩展,因为您的内部type_a
已经是types_t
。