0

これはCです。私は多くのファイルで使用するハンドルを持っています(これを と呼びましょうtype_handle)。多くの関数は入力パラメーターとして受け取るため、すべてのファイルをやり直す必要があるように設計を大幅に変更したくありません。だから私の考えは、、、そして次に渡すことです。を取得する関数を変更する必要がないように、必要なすべてのタイプのある種の関数が必要です。これをどのように設計すればよいですか?enummy_typetype_handleintfloatdoublemy_typeuniontype_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;

これを、 dtype が type の派生データ型である場合と同様にany_func(type_handle type)受け入れることができるように設計したいと考えています。any_func(INT)any_func(dtype)my_type

4

1 に答える 1

1

C でa を使用する場合、使用するunionメンバーを知る方法が必要です。C 自体unionは、割り当てた要素が your のどの要素であるかを伝えることはできません。すでに型を扱っているため、これを説明するのは混乱しますが、イディオムは次のようになります。

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 に答える