
----- Original Message ----- From: "Yechezkel Mett" <ymett.on.boost@gmail.com> To: <boost@lists.boost.org> Sent: Wednesday, November 19, 2008 4:32 PM Subject: Re: [boost] task_array<n> and variadic templates
On Wed, Nov 19, 2008 at 5:08 PM, Vicente Botet <vicente.botet@wanadoo.fr> wrote:
Comming back to my example, I need to store the tasks on an array. I do it now like this:
template <> struct task_array<3> { task arr_[3]; template <typename F_1, typename F_2, typename F_3> task_array(F_1 f1, F_2 f2, F_3 f3) { arr_[0]=task(f1); arr_[1]=task(f2); arr_[2]=task(f3); } };
I don't see a simple way to do it with variadic templates other than recursion.
Is there a simple way to achieve this something like
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") { arr_={task(f)...}; } };
Recursion is the way to do anything with variadic templates :-) But the following should work in theory:
template <std::size N> struct task_array { task arr_[N]; template <typename... F> task_array(F... f) : arr_({task(f)...}) { static_assert(sizeof...(T) == N, "Constructor must provide N parameters") } };
if you can find a compiler that supports the new initialisation syntax, that is.
I was looking for confirmation. Thanks, Vicente