在运行时循环可变模板类型

问题描述 投票:0回答:0

我将代码从 C++11 迁移到 C++17。在该代码中,我做了类似这样的(无效的)代码:

template <typename... Ts>
std::vector<std::size_t> store_types()
{
    std::vector<std::size_t> t;
    for(typename T : Ts)
        t.push_back(typeid(T).hash_code());
    return t;
}

目前,我的实现如下:

template <typename Unused>
void add_types_in(std::vector<std::size_t>&)
{}

template <typename Unused, typename First, typename... Others>
void add_types_in(std::vector<std::size_t>& t)
{
    t.push_back(typeid(First).hash_code());
    add_types_in<Unused, Others...>(t);
}

template <typename... Ts>
std::vector<std::size_t> store_types()
{
    std::vector<std::size_t> t;
    add_types_in<void*, Ts...>(t);
    return t;
}

我在 C++17 中看到了很多可变参数功能,但还有很多东西我还不明白。 C++17 中是否有比我的实现更优雅(又名“单行”)的东西? 也许类似于折叠表达式的东西?

c++ c++17 variadic-templates
© www.soinside.com 2019 - 2024. All rights reserved.