我有一个类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)
完成。
这有可能通过一些漂亮的模板递归吗?
到目前为止,我无法想出一种方法来注入这个,嗯......
当然可以在std::unique_ptr
中使用一些A
并制作模板递归包装器来生成new TensorMap
,但这不是我想要的。
答案 0 :(得分: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;
};