gpt4 book ai didi

C++ 如何根据某些条件在编译时删除类成员字段?

转载 作者:行者123 更新时间:2023-12-05 05:56:17 26 4
gpt4 key购买 nike

我需要一种在编译时根据某些条件删除类成员字段的方法。我一直在尝试一些事情,例如:

template <bool Condition, class FieldType> struct Conditional { FieldType Value; };
template <class FieldType> struct Conditional<false, FieldType> {};

但我的问题是,以这种方式声明的成员仍然占用总类(class)人数的空间。我的目标是通过根据编译时条件删除一些成员来减少总类大小。这可能没有类继承吗?

如果重要的话,我可以访问 C++20。

最佳答案

我知道我一直在问没有类继承,但看起来像Empty Base Optimization是我能找到的唯一方法。为此,我这样做了:

创建两个结构,一个有值,一个为空:

struct Empty {};
struct SomeField { int something };

并且让我想要根据一些编译时条件启用/禁用成员字段的类派生自 std::conditional_t:

template <class T>
class SomeClass : private std::conditional_t<some_condition<T>, SomeField, Empty> { ... }

不是最好的,但它确实实现了我减少类(class)总人数的目标。

关于C++ 如何根据某些条件在编译时删除类成员字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69216237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com