将元组解压缩为成员初始化或超类构造函数

时间:2018-10-16 19:56:20

标签: c++ c++17 template-meta-programming stdtuple argument-unpacking

是否可以通过使用元组中包含的参数来初始化类的成员(或调用超类构造函数)? 请注意,我知道weightsCov_matrix,但是在这种情况下不能使用它们。

考虑者std::make_from_tuple()不可复制不可可默认构造,不可可移动,不可可分配,没有别的。实例化它的唯一方法是使用std::apply()提供的参数。 能做到吗?

我的尝试失败了,尽管“生成的扩展模式不包含任何参数包”,尽管index_sequence生成的应该是一个。

sometype

1 个答案:

答案 0 :(得分:2)

如果您坚持不使用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)...)
    { }