C++11中新增了initial_list特性,下面将基于initial_list实现任意数量的参数的比较函数。
上代码:
/*******************************************
* Name: example.cpp
* Describe: 可变模板参数实例3-基于initial_list的比较(不是可变模板参数)
* Author: SSCOCA
* Version: 1.00
* Date: 2018年8月9日
* Other:
*********************************************/
#include <initializer_list>
using namespace std;
struct _Less_Compare
{
template<typename T1, typename T2>
bool operator()(T1 iter1, T2 iter2){
return *iter1 < *iter2;
}
};
template<typename _ForwardIterator, typename _Compare>
_ForwardIterator _max_element(_ForwardIterator _first, _ForwardIterator _last, _Compare _cmp){
if (_first == _last) return _first;
_ForwardIterator _result = _first;
while (++_first != _last)
{
if (_cmp(_result, _first))
_result = _first;
}
return _result;
}
template<typename _ForwardIterator>
_ForwardIterator max_element(_ForwardIterator _first, _ForwardIterator _last){
return _max_element(_first, _last, _Less_Compare());
}
template<typename _Tp>
_Tp max(initializer_list<_Tp> _l){
return *max_element(_l.begin(), _l.end());
}
void main3(){
int num = max({ 1, 2, 3, 5, 7, 4 });
}