我有一个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注入(inject)可变参数构造函数中。 idx的数字访问由operator()(int i)完成。
通过一些漂亮的模板递归可以做到吗?
到目前为止,我还没有想出一种方法来注入(inject)这个,嗯...

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

最佳答案

使用委托(delegate)构造函数和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;
};

关于c++ - 解压缩成可变参数的构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33015125/

10-11 23:02
查看更多