У меня есть класс, который выглядит примерно так:Компиляция переменных члена класса с шаблонами на C++?
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;
};
Когда я создаю новый класс соединение, я выделить дополнительную память [SizeOf (соединение) + extraSpace]. Каждый из pValue ссылается на адрес в дополнительной памяти.
Теперь я хотел бы уменьшить количество pValue в зависимости от того, какие из них мне нужны. Шаблоны кажутся подходящими.
Так что если бы я хотел класса Compound < 0A>, мне бы хотелось только pValue0 и pValueA, а затем укомплектовать компилятор всеми остальными pValues. По существу, я бы хотел, чтобы это стало следующим:
template <uint Mask = 0A>
class Compound<Mask>
{
void* pValue0;
void* pValueA;
}
Возможно ли это? Я был близок с enable_if, но когда я попытался ограничить его конкретной маской, компилятор бросил ошибки о том, что не смог найти тип, когда case enable_if был ложным.
Спасибо всем!
Почему не класс со списком указателей? –
Как это отличается от хранения всех ваших значений в 'std :: vector'? Вы можете получить 'pValue0' в любое время, когда вам нужно' & v [0] '. –
Вы можете достичь того, чего хотите, используя [пустую оптимизацию элемента] (http://www.cantrip.org/emptyopt.html) в сочетании с 'std :: условным' (чтобы переключиться на пустой тип, когда условие является ложным). Это было бы уродливо. – VoidStar