解压缩到可变参数构造函数

Gab*_*iel 1 c++ variadic-templates c++11 c++14

我有一个类TensorMap(eigen3库),它采用(简化在这里)数字列表:

class TensorMap{
public:
   template<typename... T>
   TensorMap(T&...i){}
} ;
Run Code Online (Sandbox Code Playgroud)

和使用此类型的结构A.

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

    TensorMap m;
};
Run Code Online (Sandbox Code Playgroud)

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

当然,人们可以使用一些std::unique_ptrA做出一个模板递归包装来产生new TensorMap,但是那不是我想要的.

Jar*_*d42 8

使用委托构造函数,和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;
};
Run Code Online (Sandbox Code Playgroud)