Выбор функции-члена с использованием различных условий Enable_if
Метафункция Enable_if используется для указания параметров функции шаблона и выбора подходящих функций-членов на их основе . Рассмотрим следующий код:
template
struct Point
{
// Check if T is int and call MyFunction for int
void MyFunction(typename std::enable_if<:is_same int>::value, T &>::type* = 0)
{
std::cout ::value, float &>::type* = 0)
{
std::cout Однако этот код может вызвать ошибки компилятора, указывающие на то, что «нет типа с именем 'type' в 'struct std::enable_if'».
Понимание Enable_if
enable_if гарантирует, что при разрешении перегрузки учитываются только допустимые перегрузки функций. Если замена аргумента шаблона не удалась, эта перегрузка удаляется из набора кандидатов.
В приведенном выше примере аргумент шаблона T уже известен при создании экземпляров функций-членов. Чтобы реализовать желаемое поведение, мы можем создать фиктивный аргумент шаблона, по умолчанию равный T, и выполнить с его помощью SFINAE:
template
struct Point
{
template
typename std::enable_if<:is_same int>::value>::type
MyFunction()
{
std::cout
typename std::enable_if<:is_same float>::value>::type
MyFunction()
{
std::cout
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3