函数模板
函数模板可以实现对不同数据类型做统一操作,比如比较两个数据的大小:
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类型。
作者:徐文焱