我将代码从 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 中是否有比我的实现更优雅(又名“单行”)的东西? 也许类似于折叠表达式的东西?