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

C中多个数据类型的统一句柄参数,c,struct,unions,C,Struct,Unions,这是C语言。我在许多文件中使用了一个句柄(我们称之为type\u handle),它目前是enum,但目前我需要扩展它以支持类型定义的结构(称为my\u type)。由于许多函数都将type\u handle作为输入参数,因此我不想主要更改设计,因此需要重做所有文件。所以我的想法是传递int,float,double,然后传递my_type。我想要一个所有类型的联合函数,这样我就不需要修改使用类型句柄的函数了。我应该如何设计这个 typedef enum { INT = MPI_INT

这是C语言。我在许多文件中使用了一个句柄(我们称之为
type\u handle
),它目前是
enum
,但目前我需要扩展它以支持类型定义的结构(称为
my\u type
)。由于许多函数都将
type\u handle
作为输入参数,因此我不想主要更改设计,因此需要重做所有文件。所以我的想法是传递
int
float
double
,然后传递
my_type
。我想要一个所有类型的
联合
函数,这样我就不需要修改使用
类型句柄的函数了。我应该如何设计这个

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;

我想以这样的方式设计它:
anyfunc(type\u handle type)
可以接受
anyfunc(INT)
以及
anyfunc(dtype)
,其中dtype是类型为
my\u type

的派生数据类型。在C中使用
联合时,您需要知道使用哪个成员。C本身无法告诉您的
联合
中的哪个元素是您分配的。由于您已经在处理类型,因此解释起来会很混乱,但习惯用法是:

struct {
   what_is_in_the_union_t what;
   union {
       type_a a;
       type_b b;
       ...
   } u;
};

其中,
什么是联合体中的联合体
是您自己的
{TYPE\u A,TYPE\u B,…}
枚举。正如我所说,在您的示例中,这将以一种令人困惑的方式扩展,因为您的内部
类型a
已经是
类型t

,如果使用不同的编译器选项(如
-enum\u is\u int
)时会导致一些问题,我从OP的帖子中了解到,使用哪一个联合成员是由调用哪一个函数简单地定义的。将说:函数知道它期望接收什么。@ HowChen:这不是C++,所以这里我们不处理(编译器提供)多态性。我认为OP想要在C中手动实现类似的功能。@alk抱歉,如果帖子没有明确说明,但是在我的例子中,任何函数,
any_func
都应该处理枚举以及
my_type
,因为我无法分离@BenJackson是的,我必须实现多态性行为。@Sayan:你的问题并不清楚,我只是没有把它读到最后,因此忽略了
any_func()
的用例。Sry!你试过了吗?你遇到了哪些问题?@alk我正在考虑设计一种方式,这样我可以在函数签名/定义中提到
type\u handle
(类型的超集),但实际上在运行时传递
type\u handle.dtype
type\u handle.etype
。但我想这是不允许的/不可能的,理由很充分。