0

这是在 C 中。我有一个句柄,我在许多文件中都使用它(让我们称之为它type_handle),这是一个enum目前的,但目前我需要扩展它以支持 typedef ed 结构(称为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 是派生数据类型的方式来设计它 type my_type

4

1 回答 1

1

在 C 中使用 aunion时,您需要某种方式来知道要使用哪个成员。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.

于 2013-08-07T02:36:10.843 回答