如何将C++参数包映射到std :: pair对象序列?

Jas*_*n R 3 c++ c++11

我有一个可变参数模板函数foo():

template <typename... Args>
void foo(Args &&... args);
Run Code Online (Sandbox Code Playgroud)

此函数旨在使用的所有参数调用size_t.我可以使用一些元编程来强制执行.我需要一次获取两个参数的结果列表,并将它们放入容器中std::pair<size_t, size_t>.从概念上讲,类似于:

std::vector<std::pair<size_t, size_t> > = { 
    std::make_pair(args[0], args[1]), 
    std::make_pair(args[2], args[3]), ...
};
Run Code Online (Sandbox Code Playgroud)

有一种直截了当的方法吗?我知道通过包扩展,我可以将参数放入一个扁平的容器中,但是有没有办法将它们两个一起分组到std::pair对象中?

Bar*_*rry 7

索引到包中并不是真的可行(但是?),但索引到元组是.首先将所有内容都粘贴到一个元组中,然后随时将所有内容拉回来.因为一切都是size_t,我们可以复制:

template <size_t... Is, class Tuple>
std::vector<std::pair<size_t, size_t>> 
foo_impl(std::index_sequence<Is...>, Tuple tuple) {
    return std::vector<std::pair<size_t, size_t> >{ 
        std::make_pair(std::get<2*Is>(tuple), std::get<2*Is+1>(tuple))...
    };
}

template <typename... Args>
void foo(Args... args)
{
    auto vs = foo_impl(std::make_index_sequence<sizeof...(Args)/2>{},
        std::make_tuple(args...));

    // ...
}
Run Code Online (Sandbox Code Playgroud)