template< typename T , T Start , T Finish > struct range_c { typedef integral_c<T,Start> start; typedef integral_c<T,Finish> finish; };
range_c
is a sorted Random Access Sequence of Integral Constants. It is not an Extensible Sequence, meaning that transformation algorithms, such as push_front
or replace
, are not applicable to it, at least directly - you need to copy the content of the range into a more suitable sequence, when needed [1].
#include "boost/mpl/range_c.hpp"
typedef range_c<int,0,0> range0; typedef range_c<int,0,1> range1; typedef range_c<int,0,10> range10;BOOST_STATIC_ASSERT(size<range0>::type::value == 0); BOOST_STATIC_ASSERT(size<range1>::type::value == 1); BOOST_STATIC_ASSERT(size<range10>::type::value == 10);
BOOST_STATIC_ASSERT(empty<range0>::type::value); BOOST_STATIC_ASSERT(!empty<range1>::type::value); BOOST_STATIC_ASSERT(!empty<range10>::type::value);
BOOST_MPL_ASSERT_IS_SAME(begin<range0>::type, end<range0>::type); BOOST_MPL_ASSERT_NOT_SAME(begin<range1>::type, end<range1>::type); BOOST_MPL_ASSERT_NOT_SAME(begin<range10>::type, end<range10>::type);
BOOST_STATIC_ASSERT(front<range1>::type::value == 0); BOOST_STATIC_ASSERT(back<range1>::type::value == 0); BOOST_STATIC_ASSERT(front<range10>::type::value == 0); BOOST_STATIC_ASSERT(back<range10>::type::value == 9);
[1] In fact, the most common application of range_c
class is to simplify the creation of sorted list
or vector
:
typedef copy< range_c<int,0,50> , push_back<_,_> , vector<> >::type numbers;
Random Access Sequence, vector
, vector_c
, list
, list_c