作者:嘿可爱无罪 | 来源:互联网 | 2022-12-02 18:43
我有一个模板化的结构,它有一个带有额外浮点数的变体,如下所示:
template
struct Foo {
std::vector a;
float b; // Not needed if HasFloat is false
};
为了节省内存(是的,它很重要)我想省略浮点数,如果HasFloat
是假的.由于struct
最好的方式还有很多其他东西会是这样的:
using B = typename std::conditional::type;
B b;
除非我能告诉你C++中没有零大小的类型.唯一的例外似乎是"灵活阵列成员",所以我可以这样做:
using B = typename std::conditional::type;
除了它们仅在C99中支持,而不是C++.
对此的标准解决方案似乎是使用继承,因为基类可以是零大小的,但是我的结构也可以通过程序集访问,并且为了使程序集更简单,如果float b;
它位于结构的末尾而不是开始,无论如何,这是不保证的.
所以这似乎是将模板专业化作为唯一的选择,但我的课实际上相当长,我想避免重复一切.我还缺少另一种解决方案吗?