C中多种数据类型的统一句柄参数

时间:2013-08-07 02:15:56

标签: c struct unions

这是在C.我有一个句柄,我在许多文件中使用(我们称之为type_handle),目前是enum,但目前我需要扩展它以支持typedef-ed struct(也称为my_type)。由于许多函数将type_handle作为输入参数,我不想主要更改设计,因此我需要重做所有文件。所以我的想法是通过intfloatdouble,然后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的派生数据类型。

1 个答案:

答案 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