在c ++ 17中解压缩可变元组

Pio*_*ycz 8 c++ variadic-templates fold-expression c++17 structured-bindings

在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;
};
Run Code Online (Sandbox Code Playgroud)

fold表达式,结构化绑定?任何提示?我可以接受回答为什么我不能在这里使用这些提到的C++ 17功能 - 但我更喜欢"解决方案.

Mas*_*nes 14

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

std::apply( [](auto&... i){ ((void)++i,...); }, some_tuple );
Run Code Online (Sandbox Code Playgroud)

注意:对于您的信息,(void)事情只是为了避免任何自定义逗号运算符开始...你永远不会知道:)

  • 不错,但仍然是一个黑客。赞成,因为 C++ 不允许直接语法不是你的错。 (2认同)