【发布时间】:2016-04-22 19:44:33
【问题描述】:
我必须调用一个可变参数模板函数,它可以接受任意数量的参数。
template < class ... Args >
void f( Args&... args);
我希望编写一个小型包装函数,以便我可以调用 f,并使用包含在固定大小容器(如 std::array)中的 N 个相同类型的参数。
目标是写类似的东西
std::array<int, 3> arr = {1,2,3};
wrapper(arr); // calls f(1,2,3);
我尝试使用初始化列表和std::forward 的某种组合,但无济于事。有没有办法实现我想要的?
【问题讨论】:
-
我想你可能正在寻找
std::integer_sequence -
我看到了使其通用化的两个问题:从您的容器创建一个元组,并将元组解包到参数包中。后一部分have already been done 留下了元组的创建,不幸的是我不知道该怎么做。
-
@Louen 你可以使用make_tuple
-
你需要有一个参数包。我认为您不能将数组转换为参数包。
-
@NathanOliver 就像将元组转换为参数包一样简单,因为
std::array具有相同的接口(@987654330@、std::tuple_size等)。
标签: c++ c++11 variadic-templates