我有一个可变参数模板函数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对象中?
索引到包中并不是真的可行(但是?),但索引到元组是.首先将所有内容都粘贴到一个元组中,然后随时将所有内容拉回来.因为一切都是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)