Передача std :: array в качестве аргументов функции шаблона variadic
Я пытаюсь узнать о шаблонах variadic в C ++ 11. У меня есть класс, который в основном является оберткой вокругstd::array
, Я хочу иметь возможность передавать функциональные объекты (в идеале лямбды) функции-члену, а затем иметь элементыstd::array
передается в качестве параметров объекта функции.
Я использовалstatic_assert
чтобы проверить, что число параметров соответствует длине массива, но я не могу придумать, как передать элементы в качестве аргументов.
Вот код
#include
#include
#include
#include
using namespace std;
template
struct Container {
template
Container(Ts&&... vs) : data{{std::forward(vs)...}} {
static_assert(sizeof...(Ts)==N,"Not enough args supplied!");
}
template< typename... Ts>
void doOperation( std::function&& 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 data;
};
int main(void)
{
Container 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(func));
cout < sum < endl;
return 0;
}