std::vector<std::type_index> vec;
template <typename T1, typename... Tn>
void Fill() {
vec.push_back(typeid(T1));
// fill the vector with the remaining type ids
}
我想用模板参数的typeid
填充向量。我怎么能实现这个呢?
答案 0 :(得分:8)
以下解决方案使用初始化列表:
template <typename... Types>
void Fill(std::vector<std::type_index>& vec)
{
vec.insert(vec.end(), {typeid(Types)...});
}
请参阅live example。
答案 1 :(得分:4)
这应该有效:
template<typename T>
void Fill() {
vec.push_back(typeid(T));
}
template <typename T1, typename T2, typename... Tn>
void Fill() {
Fill<T1>();
Fill<T2, Tn...>();
}
答案 2 :(得分:2)
使用递归实现它:
std::vector<std::type_index> vec;
template<typename T>
void fill(){
vec.emplace_back(typeid(T)); // pretty sure you want emplace_back here ;)
}
template<typename T1, typename T2, typename ... Tn>
void fill(){
fill<T1>();
fill<T2, Tn...>();
}
我认为这会做你想要的。