【发布时间】:2015-06-25 15:04:22
【问题描述】:
有没有办法将类型参数包转换为从0 到sizeof...(Types) 的整数参数包?更具体地说,我正在尝试这样做:
template <size_t... I>
void bar();
template <typename... Types>
void foo() {
bar<WHAT_GOES_HERE<Types>...>();
}
例如,foo<int,float,double>() 应该调用bar<0, 1, 2>();
在我的用例中,参数包Types 可能包含多次相同的类型,因此我无法搜索包来计算给定类型的索引。
【问题讨论】:
-
真正的问题是什么?我相信我们可以提供更好的建议。
-
bar<0, 1, 2>()比bar<3>()有什么好处? -
如果我有
template <typename... Args> void g(Args&&...);和template <size_t I> auto h();。我希望能够从提供给foo()的参数包中执行g(h<I>()...);。 TartanLlama 的解决方案有效。我正在使用这些模板技巧来实现“数组结构”容器类型的复制构造函数,该容器类型本身使用可变参数模板来定义类型。
标签: c++ templates c++11 variadic-templates c++14