C++ type_traits.

// enable_if example: two ways of using enable_if
#include <iostream>
#include <type_traits>
// 1. the return type (bool) is only valid if T is an integral type:
// 1. 这里的返回类型为 bool 只有当 T是一个有效的类型的时候. std::is_integral<T>::value;得到的是false/ture;
// template<class T> struct enable_if<true, T> { typedef T type; };
// enable_if只有在第一个模板参数为true的时候才能得到T的类型.
template <class T>
typename std::enable_if<std::is_integral<T>::value, bool>::type
  is_odd (T i) {return bool(i%2);}
// 2. the second template argument is only valid if T is an integral type:
// template<bool Cond, class T = void> struct enable_if {};
// 注意这里的class T = void 因为void能兼容所有类型因此在下面的应用中是可以不用摘指定出来的. 
template < class T, class = typename std::enable_if<std::is_integral<T>::value> ::type>
bool is_even (T i) {return !bool(i%2);}
int main() {
  short int i = 1;    // code does not compile if type of i is not integral
  std::cout << std::boolalpha;
  std::cout << "i is odd: " << is_odd(i) << std::endl;
  std::cout << "i is even: " << is_even(i) << std::endl;
  return 0;
}

你可能感兴趣的:(C++ type_traits.)