1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include <iostream>
#include <cassert>
using namespace std;
template< typename T , char delimeter >
struct Format
{
Format( T begin_ , T end_ , T stride_ )
: begin {begin_} , end {end_} , stride {stride_}
{
assert( begin<=end && begin>=0 && end>=0 && stride>0 );
}
T begin {0};
T end {0};
T stride {1};
};
template< typename T, auto delimeter >
ostream& operator<<( ostream& out , const Format<T,delimeter>& format )
{
for( auto index {format.begin} ; index<=format.end ; index+=format.stride )
{
out << index << ((index+format.stride>=format.end)?' ':delimeter);
}
out << endl;
return out;
}
template< char delimeter = ' ' , typename T >
Format<T,delimeter> print( T start , T end , T stride = 1 )
{
return {start,end,stride};
}
int main()
{
cout << print<','>(1,10,2) << print(1,5) << print<'-'>(0.1,0.9,0.1);
return 0;
}
|