c++函数模板参数类型限定
函数模板
函数模板可以实现对不同数据类型做统一操作,比如比较两个数据的大小:
template<typename T> bool compare(T& a,T& b) { return a < b; }
函数模板的调用
void main() { bool ret = compare<int>(5, 10); ret = compare<float>(5.0f, 10.0f); }
函数模板参数类型限定
一个函数声明为了模板函数,那就意味着可以给该函数传入任意的参数类型,但是可能模板函数内部实现并不支持某些类型,此时我们就需要给模板函数做参数类型限定。比如如何实现上面的函数只支持int和short类型。
方法1
template <typename T> struct Checker; template <> struct Checker<int> { typedef int Type; }; template <> struct Checker<short> { typedef int Type; }; template <typename T> bool compare(typename Checker<T>::Type a, typename Checker<T>::Type b) { return a < b; }
方法2
template<typename T> typename std::enable_if<std::is_same<int, T>::value || std::is_same<short, T>::value, bool>::type compare(T a, T b) { return a < b; }
上面的 compare函数就只支持传入int和short类型了,如果传入其它参数类型就会报错,如float类型。