8

c++17(可能是 C++2a)有什么比经典的 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;
};

折叠表达式结构化绑定?有什么提示吗?我可以接受为什么我不能在这里使用这些提到的 C++17 功能的答案——但我更喜欢“解决方案。

4

1 回答 1

15

从 C++14 开始,我们有了通用 lambda,从 C++17 开始,我们有了折叠表达式并std::apply有效地隐藏了通常的解包逻辑:

std::apply( [](auto&... i){ ((void)++i,...); }, some_tuple );

注意:供您参考, (void) 事情只是为了避免任何自定义逗号运算符介入......你永远不知道:)

于 2018-01-26T15:36:42.207 回答