有没有办法将类型参数包转换为从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
可能包含多次相同的类型,因此我无法搜索包以计算给定类型的索引。
答案 0 :(得分:10)
在C ++ 14中,您可以使用std::index_sequence_for
标题中的<utility>
以及带标记的调度。这被称为 indices trick :
template <std::size_t... I>
void bar(std::index_sequence<I...>);
template <typename... Types>
void foo() {
bar(std::index_sequence_for<Types...>{});
}
如果您仅限于C ++ 11,您可以在线找到上述的许多实现,例如this one。