我在板上发现了一个参数包扩展,但我不明白到底发生了什么

I've found a parameter pack expansion here on the board and I don't understand what exactly is going

我在黑板上看到了一个我不明白的code snippet

struct expression_sequence
{
    template<typename... Ts>
    expression_sequence(Ts&&... ts) { }
};

template<typename T, class Tuple = std::vector<T>>
class vector
{
public:    
    template<typename... Elements>
    vector(Elements&&... elements)
    {
        m_elements.reserve(sizeof...(Elements));
        expression_sequence{ (m_elements.push_back(std::forward<Elements>(elements)), 0)... };
    }

private:
    Tuple m_elements;
};

What exactly is going on at expression_sequence{ (m_elements.push_back(std::forward<Elements>(elements)), 0)... }; and why is it working?

我不明白为什么我们需要用 (, 0) 包围 m_elements.push_back(std::forward<Elements>(elements))。 (为什么 0,即为什么 int?)。 (m_elements.push_back(std::forward<Elements>(elements)), 0) 的类型是什么?

这是一个解决方法,等待 fold expression

目前,push_back只接受一个元素,因此您无法解压参数列表。
使用这个技巧,使用 class 及其(让我说)可变参数构造函数,您成功解压了参数包,但 class 仍然需要一个类型列表,即使它不使用这些参数。
因此,使用周围的部分 (, 0) 您实际上允许支持结构从 int 的列表中自动推断其类型,以便该代码编译。

有人可能会说支持结构完全没用。
当然,这只不过是一个技巧,因为折叠表达式是为修订版 C++17.

计划的