LINUX.ORG.RU

std::enable_if для std::is_integral исключая bool

 ,


0

1

Глупый вопрос: есть ли какой-нибудь предикат из std:: чтоб проверить что шаблонный тип есть численным, но не bool?

Пример:

template <typename Numeric>
std::enable_if_t<(std::is_integral<T>::value && \
                  !std::is_same<T, bool>::value) ||
                 std::is_floating_point<T>::value,
                 Numeric>
processValue(const std::string &value) {
    return boost::lexical_cast<T>(value);
}

Или надо написать свой супер-пyпер предикат?

P.S. Стандарт C++14

Если используется в одном месте - оставить как есть, если в двух и более - написать свой супер-пупер. // К.О.

tailgunner ★★★★★
()

Можно немного упростить с std::is_arithmetic:

template <typename T>
std::enable_if_t<std::is_arithmetic<T>::value &&
                 !std::is_same<T, bool>::value,
                 T>
processValue(const std::string &value) {
    return boost::lexical_cast<T>(value);
}

Предикат, по идее, будет выглядеть аналогично:

template< class T >
struct is_numeric : std::integral_constant<bool,
                                           std::is_arithmetic<T>::value &&
                                           !std::is_same<T, bool>::value> {};

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Хах, спасибо. Что-то я пропоргал std::is_arithmetic. В принципе теперь конструкция не такая большая, можно предикат не писать.

Но всеже is_numeric_v<T> выглядит аккуратнее, да и в проекте уже есть свои расширения type_traits.

KennyMinigun ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.