«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как работает `std::enable_if`: разгадываем тайны его реализации и использования?

Как работает `std::enable_if`: разгадываем тайны его реализации и использования?

Опубликовано 12 ноября 2024 г.
Просматривать:553

How Does `std::enable_if` Work: Unraveling the Mysteries of Its Implementation and Usage?

Понимание std::enable_if: расшифровка его цели и реализации

Хотя природа std::enable_if понимается в определенных контекстах, его сложности, особенно второй аргумент и присвоение std::enable_if в операторе шаблона, остаются загадочными. Углубление его работы позволит разгадать эти тайны.

Основы std::enable_if

std::enable_if — это специализированный шаблон, определенный следующим образом:

template struct enable_if {};
template struct enable_if { typedef T type; };

Важно отметить, что псевдоним типа typedef T type определяется только в том случае, если Cond имеет значение true.

Раскрытие использования

Рассмотрим следующее объявление:

template
typename std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }

Здесь тип возвращаемого значения foo определяется std::enable_if<:numeric_limits>::is_integer, void>::type. Поскольку std::numeric_limits::is_integer является логическим условием, этот тип возвращаемого значения будет определен только в том случае, если условие истинно.

Уточнение второго аргумента

В обозначениях:

template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }

Значение = 0 используется для определения второго параметра шаблона по умолчанию. Это позволяет вызывать обе опции с помощью foo(1), в отличие от необходимости использования двух параметров шаблона, если параметр std::enable_if не был установлен по умолчанию.

Примечательные детали

  • Явный ввод имени типа std::enable_if<:condition t>::type Enhances ясность.
  • В C 14 Enable_if_t — это установленный тип, который следует использовать для возвращаемого типа, упрощая его до std::enable_if_t.
  • Для версий Visual Studio до 2013 года , только возвращаемый тип может использовать Enable_if.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3