Понимание 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
Уточнение второго аргумента
В обозначениях:
template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }
Значение = 0 используется для определения второго параметра шаблона по умолчанию. Это позволяет вызывать обе опции с помощью foo
Примечательные детали
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3