【发布时间】:2021-11-12 08:54:42
【问题描述】:
有些 C 项目的结构中充满了 ifdef(例如 WolfSSL https://github.com/wolfSSL/wolfssl/blob/bb70fee1ecff8945af8179f48e90d78ea7007c66/wolfssl/internal.h#L2792)
struct {
int filed_1;
int field_2;
#ifdef SETTING_A
int filed_b;
#endif
#ifdef SETTING_B
int field_b;
#endif
}
原因是为了减少未使用选项的结构大小。 有很多ifdef!无处不在!
有没有一种 C++ 方法可以摆脱那些 ifdef,保留编译器优化未使用字段的能力? 也许使用模板、使用或 CRTP 继承?
【问题讨论】:
-
您正在查看一个 C 项目。在这方面,在 C 中不可能有太多的事情。在 C++ 中,您可以只使用(多重)继承。
-
С++ 继承使用虚拟指针表,因此会影响性能。此外,这种方法需要 2 个设置有 4 个不同的类。如果我有 10 个设置怎么办?
-
继承并不意味着 vtable
-
即使如果你能够做到这一点,代码的所有用户仍然需要在编译时检查 field_a 和 field_b 是否存在。
-
@XeenychXeenych 没有虚拟成员的结构没有虚拟开销