SFINAE весьма полезен для отбрасывания тел функций, но почему его нельзя использовать для отбрасывания переменных-членов?
Планируется ли когда-нибудь добавить такую функциональность в современный C ++? Я попытался использовать std::enable_if
, std::conditional
(что сработало бы, если бы было разрешено иметь тип нулевого размера, но, вероятно, сломало бы все остальное).
Мне бы хотелось иметь возможность генерировать псевдонимы, используя гипотетический шаблон SFINAE, например:
template<class T, SIZE>
struct Vector {
union {
T mArray[SIZE] = {};
struct {
std::declare_if<SIZE >= 1, T>::type x;
std::declare_if<SIZE >= 2, T>::type y;
std::declare_if<SIZE >= 3, T>::type z;
};
};
};
Я не вижу достаточных причин для того, чтобы этого не существовало на данный момент, кроме отсутствия поддержки компилятора?
Если у вас есть идея элегантного обходного пути или решения, без добавления дополнительного размера к объединению или написания стандартного кода, такого как база, а затем частично специализированных дериваций.
Я хотел бы знать.