c++如何删除类成员字段在编译时基于一些条件?



我需要有一种方法来删除类成员字段在编译时基于一些条件。我一直在尝试一些事情,比如:

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

但是我的问题是,以这种方式声明的成员仍然在总类大小上使用空间。我的目标是减少总班级规模通过根据编译时条件删除一些成员。没有类继承,可以吗?

?如果需要的话,我可以访问c++ 20。

我知道我一直在问没有类继承,但似乎空基地优化是我能找到的唯一方法。为了达到这个目的,我这样做了:

创建两个结构体,一个带值,一个空:

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

并有类,我想启用/禁用一个成员字段基于一些编译时的条件从std::conditional_t派生:

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

不是最好的,但它确实达到了我减少总班级规模的目标。

最新更新