【发布时间】:2017-01-24 19:51:37
【问题描述】:
我有一个可变参数模板函数foo():
template <typename... Args>
void foo(Args &&... args);
此函数旨在使用size_t 的所有参数调用。我可以使用some metaprogramming 来强制执行。我需要一次取出两个参数的结果列表并将它们放入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]), ...
};
有没有一种简单的方法可以做到这一点?我知道通过包扩展,我可以将参数放入一个平面容器中,但是有没有办法将它们两两分组到 std::pair 对象中?
【问题讨论】:
-
"有直接的方法吗?"没有。
-
我猜,可以创建一个递归插入器,它会消耗两个参数,并将它们作为对推入向量中,并具有两个停止案例特化。
-
您是否可以转发到具有额外
std::index_sequence<I...>参数的内部辅助函数? -
@KerrekSB:这是可行的,但我仍然习惯于使用 C++11 功能,所以我不确定它是如何工作的。
std::index_sequence<>也仅限于 C++14,不是吗?不是炫耀,但我想知道它。 -
@JasonR:你可以自己定义任何等同于
index_sequence的模板。