解包到可变参数构造函数

unpacking into variadic constructor

我有一个 class TensorMap(eigen3 库),它采用(此处简化)数字列表:

class TensorMap{
public:
   template<typename... T>
   TensorMap(T&...i){}
} ;

和一个使用这种类型的结构 A

struct A{
    template<unsigned int N>
    A( NumberList<N> & idx ): m( /* idx(0),idx(1), ...., idx(N-1) */ ) ) {}

    TensorMap m;
};

如何将数字列表 NumberList<N> & idx 注入可变参数构造函数。 idx 的号码访问由 operator()(int i) 完成。 这可能通过一些漂亮的模板递归实现吗? 到目前为止我想不出一个注入这个的方法,嗯...

当然可以在 A 中使用一些 std::unique_ptr 并制作一个模板递归包装器来生成 new TensorMap,但这不是我想要的。

使用委托构造函数,并且std::index_sequence:

struct A{
public:
    template<unsigned int N>
    A( NumberList<N> & idx ) : A(idx, std::make_index_sequence<N>{}) {}

private:
    template<unsigned int N, std::size_t... Is>
    A( NumberList<N> & idx, std::index_sequence<Is...>) : m(idx(Is)...) {}
public:
    TensorMap m;
};