.funkyblue { color:#0000AF; }
C++0x feature is so nice
Here an example what can be done with it!
#include <iostream>
#include <iterator>
#include <algorithm>
template<typename IterT>
void fill_args(IterT it, IterT end)
{}
template<typename IterT, typename T, typename …Args>
void fill_args(IterT it, IterT end, T const & value, Args const & …args)
{
if(it != end)
{
*it = value;
fill_args(++it, end, args…);
}
}
template< typename T, size_t N >
struct fixed_vector //aka array
{
typedef T * iterator;
typedef T const * const_iterator;
typedef T & reference;
typedef T const & const_reference;
template<typename …Args>
fixed_vector(Args const & …args)
{
fill_args(begin(), end(), args…);
}
reference operator[](size_t idx)
{
return arr[idx];
}
const_reference operator[](size_t idx) const
{
return arr[idx];
}
iterator begin()
{
return arr + 0;
}
const_iterator begin() const
{
return arr + 0;
}
iterator end()
{
return arr + N;
}
const_iterator end() const
{
return arr + N;
}
size_t size() const
{
return N;
}
private:
T arr[N];
};
int main()
{
fixed_vector<int, 4> v(1,2,3,4);
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));
}