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

标签 c++ templates c++11 variadic-templates typeinfo

我不确定我是否以最有效的方式对问题进行了措辞,但我现在才刚刚开始使用 C++11,并且无法将其新功能应用于手头的问题。我有以下名义功能:

template <typename ... Args>
std::vector<std::type_index> foo()

我想要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))。 我觉得应该有一种干净的方法来完成这项工作,但我不清楚如何操作可变参数模板机制来完成这项工作。我的直觉是正确的吗?

最佳答案

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

return { type_index(typeid(Args))... }

关于c++ - 如何获取C++11参数包中的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24758334/

相关文章:

python - 如何在函数中更改python字典中的类型?

c++ - 以下递归解决方案的大O

c++ - 继承C++

c++ - 为什么 std::move 之后的析构函数调用是必要的?

c++ - dbus session connections : connecting dbus signals with qt slots, 怎么办?

C++11 嵌套 lambda 编译段错误

c++ - 为指向集合的指针重载开始/结束是个好主意吗

c++ - 递归模板函数无法分配给具有 const 限定类型 'state' 的变量 'const tt &'

c++ - 获取 Base 任何子类的类

c++ - 如果用户定义的构造函数省略了数据成员的初始化,会发生什么?