Passando std :: array como argumentos da função variadic do modelo

Eu estou tentando aprender sobre modelos variadic em C ++ 11. Eu tenho uma classe que é basicamente um wrapper em torno de umstd::array. Eu quero ser capaz de passar objetos de função (idealmente lambdas) para uma função de membro e, em seguida, ter os elementos dostd::array passou como parâmetros do objeto de função.

Eu usei umstatic_assert para verificar se o número de parâmetros corresponde ao comprimento da matriz, mas não consigo pensar em uma maneira de passar os elementos como argumentos.

Aqui está o código

#include <iostream>
#include <array>
#include <memory>
#include <initializer_list>

using namespace std;

template<int N, typename T>
struct Container {
    template<typename... Ts>
    Container(Ts&&... vs) : data{{std::forward<Ts>(vs)...}} {
        static_assert(sizeof...(Ts)==N,"Not enough args supplied!");
    }

    template< typename... Ts>
    void doOperation( std::function<void(Ts...)>&& func )
    {
        static_assert(sizeof...(Ts)==N,"Size of variadic template args does not match array length");

        // how can one call func with the entries
        // of data as the parameters (in a way generic with N)
    }

    std::array<T,N> data;
};

int main(void)
{
    Container<3,int> cont(1,2,3);

    double sum = 0.0;
    auto func = [&sum](int x, int y, int z)->void{
        sum += x;
        sum += y;
        sum += z;
    };

    cont.doOperation(std::function<void(int,int,int)>(func));

    cout << sum << endl;

    return 0;
}

Então, minha pergunta (como indicado no código) é como se pode passar as entradas dedata para a funçãofunc de uma forma que é genérico comN?

Pergunta bônus: É possível acabar com a conversão inestética parastd::function no principal e passar em um lambda diretamente?

questionAnswers(2)

yourAnswerToTheQuestion