【发布时间】:2015-09-17 20:09:39
【问题描述】:
我有一个类似这样的类:
class Compound
{
void* pValue0;
void* pValue1;
void* pValue2;
void* pValue3;
void* pValue4;
void* pValue5;
void* pValue6;
void* pValue7;
void* pValue8;
void* pValue9;
void* pValueA;
void* pValueB;
void* pValueC;
};
当我创建一个新的 Compound 类时,我分配了额外的内存 [sizeof(Compound) + extraSpace]。每个 pValue 都指向额外内存中的一个地址。
现在,我想根据需要减少 pValue 的数量。模板似乎很合适。
所以如果我想要一个类 Compound,我只想要 pValue0 和 pValueA,然后让编译器删除所有其他 pValue。本质上,我希望它变成:
template <uint Mask = 0A>
class Compound<Mask>
{
void* pValue0;
void* pValueA;
}
这可能吗?我接近了 enable_if,但是当我尝试将其限制为特定掩码时,编译器会在 enable_if 情况为假时抛出有关无法找到类型的错误。
谢谢大家!
【问题讨论】:
-
为什么不是一个带有指针列表的类?
-
这与将所有值存储在
std::vector中有何不同?您可以随时通过&v[0]获得pValue0。 -
您可以通过使用empty member optimization 结合
std::conditional来实现您想要的(当条件为假时切换为空类型)。不过那会很丑。 -
@BoPersson,唯一的问题是,在实践中,所有 pValue 都将是指向使用其类型定义的其他类的指针,而不仅仅是 void*。
-
整数
0A与整数A是同一个整数。
标签: c++ templates c++11 compiler-errors