我有一个 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;
};
如何注入(inject)数字列表 NumberList<N> & idx
, 进入可变构造函数。 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/