这是实现我自己的函数(例如DoSomethingWithRange)接受增量范围作为参数的好方法吗?
#include <iostream>
#include <vector>
#include <boost/range.hpp>
#include <boost/range/algorithm.hpp>
#include <boost/range/adaptors.hpp>
using namespace std;
template <typename RangeType>
void DoSomethingWithRange(const RangeType &range)
{
typename RangeType::const_iterator beginIt = boost::begin(range);
typename RangeType::const_iterator endIt = boost::end(range);
for(typename RangeType::const_iterator it = beginIt; it != endIt; ++it)
{
cout << *it << endl;
}
}
bool IsPos(int i)
{
return i>0;
}
int main(int , char** )
{
vector<int> test;
test.push_back(1);
test.push_back(-1);
DoSomethingWithRange(test | boost::adaptors::filtered(IsPos));
}
Run Code Online (Sandbox Code Playgroud)
int*_*jay 10
这不适用于普通数组,因为RangeType::const_iterator不会定义.传入时它也不起作用std::pair<iterator,iterator>,Boost.Range也支持它.
相反,你应该使用boost::range_iterator<const RangeType>::type.这将适用于Boost.Range支持的所有类型:普通可迭代对象,数组和迭代器对.
例:
template <typename RangeType>
void DoSomethingWithRange(const RangeType &range)
{
typedef typename boost::range_iterator<const RangeType>::type const_iterator;
const_iterator endIt = boost::end(range);
for(const_iterator it = boost::begin(range); it != endIt; ++it)
cout << *it << endl;
}
int main(int, char** )
{
vector<int> test;
test.push_back(1);
test.push_back(-1);
DoSomethingWithRange(test);
int test2[] = {12,34};
DoSomethingWithRange(test2);
std::pair<int*,int*> test3(test2, test2+1);
DoSomethingWithRange(test3);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |