In c++, how can I implement a function with an int template argument indicating the tuple length and produce a std::tuple with that length?
E.g.
func<
Using an index_sequence and a helper type alias you can generate the type you want:
// Just something to take a size_t and give the type `int`
template
using Integer = int;
// will get a sequence of Is = 0, 1, ..., N
template
auto func_impl(std::index_sequence) {
// Integer... becomes one `int` for each element in Is...
return std::tuple...>{};
}
template
auto func() {
return func_impl(std::make_index_sequence{});
}
It is worth calling out that in the general case you would probably be better with a std::array
, (in your case you can't use one), but a std::array
can behave like a tuple, similarly to a std::pair
.
Update: since you've made it clear you're working with c++11 and not 14+, you'll need to get an implementation of index_sequence
and related from somewhere (here is libc++'s). Here is the C++11 version of func
and func_impl
with explicit return types:
template
auto func_impl(std::index_sequence) -> std::tuple...> {
return std::tuple...>{};
}
template
auto func() -> decltype(func_impl(std::make_index_sequence{})) {
return func_impl(std::make_index_sequence{});
}