Возможно ли использование оператора == в std::enable_if? <type_traits>

155
16 ноября 2019, 21:20

Предположим есть реализация шаблона проектирования object pool.

template<typename T, size_t count>
class ObjectPoll {
public:
    /*...*/
private:
    size_t m_count = count;
    /*...*/
}

Хочется получить ошибку на этапе компиляции, если пользователь пытается создать объект ObjectPool<Bullet, 0> bulletsPool; Возможно ли сделать это при помощи std::enable_if<>? Например:

template<typename T, size_t count, typename = std::enable_if<count != 0>::value>
class ObjectPoll {/*...*/};

Или лучше сделать это при помощи static_assert?

Answer 1

Да, можно. Только раз уж вы основываете это на типовом параметре, то почему из enable_if<> вы вдруг берете enable_if<>::value, а не enable_if<>::type?

Правильно

template<typename T, size_t count, typename = typename std::enable_if<count != 0>::type>

Однако static_assert для этой цели действительно выглядит намного уместнее.

READ ALSO
Ошибка в методе шаблона класса. С++

Ошибка в методе шаблона класса. С++

Константные функции лучше делать константными:

158
Перегрузка оператора == и шаблоны

Перегрузка оператора == и шаблоны

Почему присутствие структуры Hard Logic приводит к ошибке компиляции, а структуры SoftLogic — нет?

147
Перевести строку в число не использую стандартные функции [закрыт]

Перевести строку в число не использую стандартные функции [закрыт]

Мне нужно написать программу которая переводит строку в числоНапример: вводится строка "1234" на выход получаем число 1234, все было бы проще...

162