目前,我有一个这样的实现,以便使用函数转换元组的所有值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(使用前将#替换为@)