Example 3: 处理一系列types相同的参数,采用initializer list,不必采用variadic templates
struct maxCmp {
template<typename Iterator>
bool operator ()(const Iterator iter1, const Iterator iter2){
return *iter1 < *iter2;
}
}
maxCmp getMaxCmpObj() {
return maxCmp();
}
template<typename Iterator, typename Cmp>
Iterator _getMaxData(Iterator begin, Iterator end, Cmp cmp) {
Iterator maxValue = begin;
while(begin != end) {
if (cmp(maxValue , begin))
maxValue = begin;
}
begin++;
}
return maxValue ;
}
template<typename Iterator>
Iterator getMaxData(Iterator begin, Iterator end) {
return _getMaxData(begin, end, getMaxCmpObj());
}
template<typename _TP>
inline _TP Max(initializer_list<_TP> _l) {
return *getMaxData(_l.begin(), _l.end());
}
Example 4 max也可以使用variadic templates实现;注意该递归函数最先处理的最后面的参数,然后依次向前。
int maximum(int n) {
return n;
}
template<typename... types>
int maximum(int n, types... arg) {
return std::max(n, maximum(arg...));
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。