I was wondering if its possible to make the following answer more generic, in the sense that the type of the array be templated instead of just unsigned:
I\'ve enclosed
It helps if you indent the struct. The problem is that you are defining the data static member variable inside the Array struct. But it should be at namespace scope:
template<typename ArrayType>
struct Array
{
template<ArrayType... args> struct ArrayHolder {
static const ArrayType data[sizeof...(args)];
};
template<size_t N, template<size_t> class F, ArrayType... args>
struct generate_array_impl {
typedef typename generate_array_impl<N-1, F, F<N>::value, args...>::result result;
};
template<template<size_t> class F, ArrayType... args>
struct generate_array_impl<0, F, args...> {
typedef ArrayHolder<F<0>::value, args...> result;
};
template<size_t N, template<size_t> class F>
struct generate_array {
typedef typename generate_array_impl<N-1, F>::result result;
};
};
template<typename ArrayType> template<ArrayType... args>
const ArrayType Array<ArrayType>::ArrayHolder<args...>::data[sizeof...(args)] = { args... };
I don't think the expression like 'template ' is a valid usage of C++11 variadic templates.
It can be of two forms as I understand:
template <typename... args>
: variable number of generic type parameters template <int... args>
: variable number of integer(non-type) parametersRefer to this wikipedia article for variadic templates.
Erm... Why don't you just use std::vector? Or if you want a non-resiable array, then use the equivalent type in boost?