$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] task_array<n> and variadic templates
From: vicente.botet (vicente.botet_at_[hidden])
Date: 2008-11-19 11:39:30
----- Original Message ----- 
From: "Yechezkel Mett" <ymett.on.boost_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Wednesday, November 19, 2008 4:51 PM
Subject: Re: [boost] task_array<n> and variadic templates
> 
> On Wed, Nov 19, 2008 at 5:32 PM, Yechezkel Mett
> <ymett.on.boost_at_[hidden]> wrote:
>> On Wed, Nov 19, 2008 at 5:08 PM, Vicente Botet <vicente.botet_at_[hidden]> wrote:
> 
> On a current compiler:
> 
> template <std::size N>
> struct task_array {
> task arr_[N];
> template <typename... F>
>  task_array(F... f) {
>      static_assert(sizeof...(T) == N, "Constructor must provide N parameters")
>      boost::array<task, N> arr = { task(f)... };
>      std::copy(arr.begin(), arr.end(), arr_);
>  }
> };
> 
> if you don't mind the multiple copies -- perhaps better to move rather
> than copy.
> 
> Recursion isn't too bad either:
> 
> namespace detail
> {
> template<typename T, typename Head, typename... Tail>
>  void fill_array(T* arr, Head h, Tail... t) {
>      *arr = T(h);
>      fill_array(arr + 1, t...);
>  }
> 
> template<typename T>
>  void fill_array(T* arr) {}
> }
> 
> template <std::size N>
> struct task_array {
> task arr_[N];
> template <typename... F>
>  task_array(F... f) {
>      static_assert(sizeof...(T) == N, "Constructor must provide N parameters")
>      detail::fill_array(arr_, f...);
>  }
> };
I will try both, changing the c array by boos::array
Thanks,
Vicente