【问题标题】:How to fill a vector with typeid's from variadic template arguments如何用可变参数模板参数中的 typeid 填充向量
【发布时间】:2014-05-02 22:32:10
【问题描述】:
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
}

我想用模板参数的typeids 填充向量。我该如何实现呢?

【问题讨论】:

标签: c++ templates variadic-templates typeid


【解决方案1】:

以下解决方案使用初始化器列表:

template <typename... Types>
void Fill(std::vector<std::type_index>& vec)
{
    vec.insert(vec.end(), {typeid(Types)...});
}

live example

【讨论】:

  • 这似乎是最短且最有效的解决方案。
  • 谢谢,这真的很有帮助。
【解决方案2】:

这应该可行:

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

【讨论】:

    【解决方案3】:

    使用递归实现它:

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

    我认为这会满足您的要求。

    【讨论】:

    • 我真的不明白你为什么要投反对票,只是评论会更有建设性:/
    • 如果您指的是我:我没有投反对票。实际上,我自己只是投了反对票,我不明白。 (我刚刚检查过:您没有反对票。您有 1 票赞成票和 0 票反对票!)
    • 哦,那是我的错,但仍然没有得到反对票
    • @CoffeeandCode 否决这个问题是免费的,因此无法解释为什么您的声誉昨天是 409 而现在是 428。你今天对一个答案投了反对票,这就是为什么我怀疑这是不是我的答案……如果我得出错误的结论,我很抱歉。
    • @πάνταῥεῖ 这是讽刺。天啊,有时这里的社区很僵硬:L
    猜你喜欢
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 2017-08-04
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多