c++11 std::enable_if原型如下:
template<bool B, class T = void>
struct enable_if;
在判断条件B为true时才有效,默认类型为void。它可以在编译期检查模板输入参数是否有效。
利用enable_if简化代码,降低代码复杂度:
template<typename T>
string ToString(T t)
{
if (typeid(T) == typeid(int) || typeid(T) == typeid(double) ||
typeid(T) == typeid(float))
{
std::stringstream ss;
ss << t;
return ss.str();
}
return std::to_string(t);
}
上面代码有if语句,判断条件还不止一个,现在利用enable_if优化
template<typename T>
typename std::enable_if<std::is_arithmetic<T>::value, string>::type
ToString(T& t) { return std::to_string(t); }
template<class T>
typename std::enable_if<!std::is_same<T, string>::value, string>::type
ToString(T& t) { return t; }