#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
0 B
|👍
/👎