Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement