Erweitern Sie einen Typ N-mal im Vorlagenparameter

Erweitern Sie einen Typ N-mal im Vorlagenparameter

Sie können std::index_sequence verwenden :

template<std::size_t N, typename = std::make_index_sequence<N>>
struct A;

template<std::size_t N, std::size_t... S>
struct A<N, std::index_sequence<S...>> {
    std::function<std::size_t(decltype(S)...)> foo;
};

Live-Beispiel

Wenn Sie möchten, können Sie auch definieren, auf welchen Typ es expandiert:

template<typename T, std::size_t N, typename = std::make_index_sequence<N>>
struct A;

template<typename T, std::size_t N, std::size_t... S>
struct A<T, N, std::index_sequence<S...>> {
    template<std::size_t>
    using type = T;

    std::function<std::size_t(decltype(S)...)> foo;
};

Für beliebigen Typ und nicht nur size_t , schreiben Sie einfach einen Hilfsalias:

template<class T, size_t>
using Type = T;

template<std::size_t... S>
struct AHelper<std::index_sequence<S...>> {
    std::function<size_t(Type<MyArbitraryTypeHere, S>...)> foo;
};