Mat*_*nte 5 c++ templates variadic-templates c++11 c++14
有没有什么办法的类型参数包从转换为整数的参数包0来sizeof...(Types)?更具体地说,我正在尝试这样做:
template <size_t... I>
void bar();
template <typename... Types>
void foo() {
bar<WHAT_GOES_HERE<Types>...>();
}
Run Code Online (Sandbox Code Playgroud)
例如,foo<int,float,double>()应该打电话bar<0, 1, 2>();
在我的用例中,参数包Types可能多次包含相同的类型,因此我无法搜索包以计算给定类型的索引.
Tar*_*ama 11
在C++ 14可以使用std::index_sequence_for从<utility>标头标记派遣一起.这被称为指数技巧:
template <std::size_t... I>
void bar(std::index_sequence<I...>);
template <typename... Types>
void foo() {
bar(std::index_sequence_for<Types...>{});
}
Run Code Online (Sandbox Code Playgroud)
如果你只限于C++ 11,你可以在网上找到上述的许多实现,比如这个.