如果你的編譯器支持C++ 14,你可以做到這一點通過以下方式:
template <class ... Args>
void f(Args&&... args) {
...
}
template<typename T, std::size_t N, std::size_t... I>
void wrapper_impl(std::array<T, N> const &arr, std::index_sequence<I...>) {
f(arr[I]...);
}
template<typename T, std::size_t N,
typename Indices = std::make_index_sequence<N>>
void wrapper(std::array<T, N> const &arr) {
wrapper_impl(arr, Indices());
}
Live Demo
對於C++ 11在此基礎上SO answer你可以編寫一些額外的機器做如下(尚未雖然測試):
namespace detail {
template<std::size_t... Is> struct seq {};
template<std::size_t N, int... Is> struct gen_seq : gen_seq<N-1,N-1, Is...> {};
template<std::size_t... Is> struct gen_seq<0, Is...> : seq<Is...> {};
}
template <class ... Args>
void f(Args&&... args) {
...
}
template<typename T, std::size_t N, std::size_t... I>
void wrapper_impl(std::array<T, N> const &arr, detail::seq<I...>) {
f(arr[I]...);
}
template<typename T, std::size_t N>
void wrapper(std::array<T, N> const &arr) {
wrapper_impl(arr, detail::gen_seq<N>());
}
Live Demo
我想你可能會尋找一個['的std :: integer_sequence'(http://en.cppreference.com/w/cpp/utility/integer_sequence) – NathanOliver
@NathanOliver - - 如果參數的類型可能是「int」以外的東西呢? – Louen
我看到了使它具有通用性的兩個問題:從容器中創建一個元組,並將元組解包到參數包中。後一部分[已經完成](http://stackoverflow.com/a/1547118/440558),這留下了我不幸不知道該怎麼做的元組的創建。 –