如何使用数字索引转换可变 std::tuple 的所有元素?

2023-12-19

目前,我有一个这样的实现,以便使用函数转换元组的所有值bar()它接受元组的每个元素。

template<typename ... Args>
void foo(const std::tuple<Args...>& a)
{
    std::tuple<Args...> transformedTuple = std::make_tuple(bar(std::get<Args>(a))...);
}

问题在于,如果Args包含重复类型。因此,我想改变std::get<>调用在元组中使用数字索引而不是使用类型。鉴于我的开发环境停留在 C++14 上,有什么方法可以让它工作吗?谢谢!


您可以使用一个辅助函数,该函数需要std::integer_sequence https://en.cppreference.com/w/cpp/utility/integer_sequence去做这个。添加一个辅助函数,该函数需要integer_sequence like

template<typename Tuple, std::size_t... I>
auto foo_helper(const Tuple& a, std::integer_sequence<std::size_t, I...>)
{
    return std::make_tuple(bar(std::get<I>(a))...);
}

然后改变foo像这样称呼助手

template<typename ... Args>
auto foo(const std::tuple<Args...>& a)
{
    return foo_helper(a, std::make_index_sequence<sizeof...(Args)>{});
}

现场演示 https://wandbox.org/permlink/9XjjWywZHyRZ55zX

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用数字索引转换可变 std::tuple 的所有元素? 的相关文章

随机推荐