如何获取C++ 11参数包中的类型?

Jas*_*n R 4 c++ templates typeinfo variadic-templates c++11

我不确定我是否以最有效的方式提出这个问题,但我现在才开始使用C++ 11,并且无法将新功能应用于手头的问题.我有以下概念功能:

template <typename ... Args>
std::vector<std::type_index> foo()
Run Code Online (Sandbox Code Playgroud)

我想foo()返回一个vector包含type_index参数包中每个类型的值的值Args.例如,foo<int, vector<int>, double>()将返回一个vector包含{ type_index(typeid(int)), type_index(typeid(vector<int>)), type_index(typeid(double)) }.

从理论上讲,我想迭代包中的类型并在每个类型上调用上面的转换(即给出一个类型T,返回type_index(typeid(T)).我觉得应该有一个干净的方法来实现这一点,但我不清楚如何操作可变模板机器来完成这项工作.我的直觉是否正确?

R. *_*des 5

对包中的类型进行"迭代"的最简单方法是使用包扩展来重复所需的模式.在这种情况下,您将编写如下内容:

return { type_index(typeid(Args))... }
Run Code Online (Sandbox Code Playgroud)