Advertisement
Gistrec

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

Dec 13th, 2018
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. /// Включение функции при помощи возвращаемого типа
  6. template<class Type>
  7. typename enable_if<is_same<int,  Type>::value, Type>::type
  8. forInteger(Type var) {
  9.     return var;
  10. }
  11.  
  12. /// Включение функции при помощи дополнительного неиспользуемого параметра
  13. template<class Type>
  14. Type forFloat(Type var, typename enable_if<is_same<float,  Type>::value >::type* = 0) {
  15.     return var;
  16. }
  17.  
  18. /// Включение функции при помощи дополнительного параметра шаблона
  19. template<class Type, class = typename enable_if<is_same<double,  Type>::value>::type>
  20. Type forDouble(Type var) { // обратите внимание, сигнатура функции не меняется
  21.     return var;
  22. }
  23.  
  24. int main() {
  25.     int var = 0;
  26.  
  27.     // Каждая фукцния для своего типа
  28.     forInteger((int)    var);
  29.     forDouble ((double) var);
  30.     forFloat  ((float)  var);
  31.  
  32.     // При использовании
  33.     // forInteger((float) var);
  34.     // Произойдет ошибка компиляции
  35.     // error: no matching function for call to ‘forInteger(float)’
  36.  
  37.     return 0;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement