将元组解包到成员初始化或超类构造函数

Unpack tuple to member initialization or superclass constructor

是否可以使用元组中包含的参数初始化 class 的成员(或调用 superclass 构造函数)? 请注意,我知道 std::make_from_tuple()std::apply(),但在这种情况下不能使用它们。

考虑 sometype 可复制, 默认构造,可移动, 可分配,非任何其他。实例化它的唯一方法是使用作为 std::tuple 提供的参数。 这能做到吗?

虽然 index_sequence 生成应该是一个,但我的尝试显然失败了 "expansion pattern contains no argument pack"。

class node {
    public:
    sometype value;
    template <typename... Args>
    explicit node(const std::tuple<Args...>& args_tuple) :
            value(
                std::get<
                    std::index_sequence_for<Args...>{}
                >(args_tuple)...
            ) {
    }
};

如果你坚持不使用std::make_from_tuple(),你需要另一个间接层:

public:
    explicit node(const std::tuple<Args...>& args_tuple) :
        node(args_tuple, std::make_index_sequence<sizeof...(Args)>{})
    { }

private:
    template<class Tuple, std::size_t... is>
    node(const Tuple& args_tuple, std::index_sequence<is...>) :
        value(std::get<is>(args_tuple)...)
    { }