Vinzenz Feenstra’s WebLog

March 27, 2008

C++ 0x Variadic Templates sooo nice :))

by @ 12:38 am. Filed under News

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, ", "));
}



Leave a Reply

archives:

March 2008
M T W T F S S
« Feb    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

internal links:

categories:

Search

other:

Advertisement