#include <tuple>
#include <utility>
using namespace std;
template <size_t... Indices, class F, class T>
auto map_filter_tuple(F f, T &t) {
return make_tuple(f(std::get<Indices>(t))...);
}
int main()
{
auto times2 = [](auto i) { return i * 2; };
auto t = make_tuple(1, 2, 3, 4);
auto t2 = map_filter_tuple<0, 1, 2>(times2, t);
}
Run Code Online (Sandbox Code Playgroud)
这可行,但我想知道如何将integer_sequence传递给map_filter_tuple
auto t3 = map_filter_tuple<std::integer_sequence<size_t,0,1,2>>(times2,t);
Run Code Online (Sandbox Code Playgroud)
我查看了源代码integer_sequence,它没有公开可变参数模板。
我想我必须使用专业化?我只是不确定我会如何处理它。
template <std::size_t... Is, typename F, typename T>
auto map_filter_tuple(F f, T& t)
{
return std::make_tuple(f(std::get<Is>(t))...);
}
template <std::size_t... Is, typename F, typename T>
auto map_filter_tuple(std::index_sequence<Is...>, F f, T& t)
{
return std::make_tuple(f(std::get<Is>(t))...);
}
template <typename S, typename F, typename T>
auto map_filter_tuple(F&& f, T& t)
{
return map_filter_tuple(S{}, std::forward<F>(f), t);
}
Run Code Online (Sandbox Code Playgroud)