
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. Yechezkel Mett