【问题标题】:What would be an elegant solution to define a set of different structs which all extend one basic struct?定义一组都扩展一个基本结构的不同结构的优雅解决方案是什么?
【发布时间】:2019-11-19 12:12:06
【问题描述】:

例如,我有一个给定的结构X。现在,我还定义了ABC。它们都包含与X 完全相同的属性,但还包含其他属性。
我看过以下问题:Extending a struct in C
我不想使用这个嵌套的东西,而且我从不使用X 本身。它只是出现在所有其他结构中的属性的集合。
我正在考虑将X 的内容定义为宏并将其用于其他结构的定义中。例如:

#ifndef
#define X                   \
    char *some_char_arr;    \
    int *some_int_arr;
#endif

struct A { 
    X
    int specific_to_a[10]; 
}

struct B { 
    X
    int specific_to_b[20];
}

struct C { 
    X
    int specific_to_c[30]; 
}

这是一个适当的解决方案还是有更好的解决方案?或者这种方法有什么问题吗?

【问题讨论】:

  • 所以他们实际上根本没有“扩展”那个“基础”,只是碰巧有一些相同的成员变量?
  • @underscore_d 是的,你可以这样说。它们只共享“相同”的成员变量。最后ABC相互没有关系,独立使用。
  • 你能有一个包含联合的结构吗?

标签: c struct


【解决方案1】:

虽然这样的宏可以编译和工作,但由于可读性和可维护性的问题,它通常被认为是不好的做法。

通常在 C 中完成继承的方式是使用嵌套结构,就像在链接的答案中一样。所以你会:

struct Base {
    char *some_char_arr;
    int *some_int_arr;
};

struct A { 
    struct Base base;
    int specific_to_a[10]; 
};

如果您不喜欢输入 a.base.some_char_arr 而只想输入 a.some_char_arr,您可以按照 here 的说明使用匿名结构(C11 支持该结构)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多