Gistrec icon

Включение функции только для определенных типов

Gistrec | PRO | 12/13/18 11:01:44 AM UTC | 0 ⭐ | 691 👁️ | Never ⏰ | []
C++ |

1.3 KB

|

None

|

0 👍

/

0 👎

#include <iostream>
 
using namespace std;
 
/// Включение функции при помощи возвращаемого типа
template<class Type>
typename enable_if<is_same<int,  Type>::value, Type>::type
forInteger(Type var) {
    return var;
}
 
/// Включение функции при помощи дополнительного неиспользуемого параметра
template<class Type>
Type forFloat(Type var, typename enable_if<is_same<float,  Type>::value >::type* = 0) {
    return var;
}
 
/// Включение функции при помощи дополнительного параметра шаблона
template<class Type, class = typename enable_if<is_same<double,  Type>::value>::type>
Type forDouble(Type var) { // обратите внимание, сигнатура функции не меняется
    return var;
}
 
int main() {
    int var = 0;
 
    // Каждая фукцния для своего типа
    forInteger((int)    var);
    forDouble ((double) var);
    forFloat  ((float)  var);
 
    // При использовании
    // forInteger((float) var);
    // Произойдет ошибка компиляции
    // error: no matching function for call to ‘forInteger(float)’
 
    return 0;
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎