Возможно ли в C ++ включать / исключать переменную-член на основе параметров шаблона?
Вот пример:
template< class T >
class RealNumber
{
T real;
};
template< class T >
class ComplexNumber
{
T real;
T imag;
};
Поскольку они имеют много общих свойств, имея только однокласс для представления числа (с дополнительным параметром шаблона) может предотвратить некоторые дубликаты кода.
То, что я хотел сделать, это что-то вроде
template< class T , class U >
Number
{
T real;
// If U is not void
U imag;
}
Так что, если второй параметр void, будетнет члена с именем imag, выдающего:
sizeof( Number< T , void > ) == sizeof( T )
Я пробовал enable_if, но не смог получить никакого результата.
Если это невозможно, есть ли какие-нибудь хаки, которые могут сделать это возможным?