如何使用variadic模板参数填充带有typeid的向量

时间:2014-05-02 13:36:09

标签: c++ templates variadic-templates typeid

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填充向量。我怎么能实现这个呢?

3 个答案:

答案 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...>();
}

Live example

答案 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...>();
}

我认为这会做你想要的。