我在理解这段代码的时候遇到了麻烦。我知道它生成了一个数字序列,来源于https://dev59.com/G3M_5IYBdhLWcg3w2XLw#24481400。但我无法从中得出逻辑,我需要一些指导来帮助我走过这段路程。尤其是为什么要用N-1, N-1
?
template <size_t ...I>
struct index_sequence {};
template <size_t N, size_t ...I>
struct make_index_sequence : public make_index_sequence<N - 1, N - 1, I...> {};
template <size_t ...I>
struct make_index_sequence<0, I...> : public index_sequence<I...> {};
make_index_sequence<sizeof...(T)>()
对于do_foo_helper
有什么影响?它似乎只是将一个没有名称的函数传递给函数,并且还需要一些帮助。
template<typename ...T, size_t ...I>
/* ... */ do_foo_helper(std::tuple<T...> &ts, index_sequence<I...>) {
std::tie(foo(std::get<I>(ts)) ...);
}
template <typename ...T>
/* ... */ do_foo(std::tuple<T...> &ts) {
return do_foo_helper(ts, make_index_sequence<sizeof...(T)>());
}