C中多个数据类型的统一句柄参数
这是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
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
。但我想这是不允许的/不可能的,理由很充分。