template<bool _Test,
class _Ty = void>
struct enable_if
{ // type is undefined for assumed !_Test
};
template<class _Ty>
struct enable_if<true, _Ty>
{ // type is _Ty for _Test
typedef _Ty type;
};
// TEMPLATE CLASS conditional
template<bool _Test,
class _Ty1,
class _Ty2>
struct conditional
{ // type is _Ty2 for assumed !_Test
typedef _Ty2 type;
};
////////////////返回值不同實現重載////
template <class T>
typename std::enable_if<std::is_arithmetic<T>::value, int>::type foo( T &t)
{
return static_cast<int>(t);
}
template <class T>
typename std::enable_if<std::is_class<T>::value, T>::type & foo( T &t)
{
return t;
}
這確實是重載呢,客官且看下面的例子
foo(n1);
Myclass a;
foo(a);