[英]Unpacking variadic tuples in c++17
在c ++ 17(可能是C ++ 2a)中有什么比使用std::index_sequence
解包variadic元组的经典C ++ 14方法更好的std::index_sequence
?
比这更好的东西:
template <typename ...I>
class MultiIterator
{
public:
MultiIterator(I const& ...i)
: i(i...)
{}
MultiIterator& operator ++()
{
increment(std::index_sequence_for<I...>{});
return *this;
}
private:
template <std::size_t ...C>
void increment(std::index_sequence<C...>)
{
std::ignore = std::make_tuple(++std::get<C>(i)...);
}
std::tuple<I...> i;
};
像fold表达式 , 结构化绑定 ? 任何提示? 我可以接受回答为什么我不能在这里使用这些提到的C ++ 17功能 - 但我更喜欢“解决方案。
从C ++ 14开始,我们有了通用的lambda,而且从C ++ 17开始,我们有了fold表达式, std::apply
有效地隐藏了通常的解包逻辑:
std::apply( [](auto&... i){ ((void)++i,...); }, some_tuple );
注意: 对于您的信息,(void)事情只是为了避免任何自定义逗号运算符开始...你永远不会知道:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.