c++ - 解包到可变参数构造函数

标签 c++ c++11 c++14 variadic-templates

我有一个 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_ptrA并制作一个模板递归包装器以生成 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/

相关文章:

c++ - 我可以在一行代码中将符合条件的 vector 的所有元素插入到集合中吗

c++ - ATMega328p : Strange behaviour sending bytes through USART

c++ - 列表参数的类型定义

c++ - 非多态继承对性能/内存使用有影响吗?

c++ - 迭代无符号整数的所有值的最漂亮方法

c++ - std::function 接受具有不同传递类型参数的 lambda 函数(通过 ref,通过 val)

c++ - 具有模板特化的 constexpr 数组成员 : inconsistent behavior cross compilers

c++ - 必须推迟成员变量的初始化。该类(class)的最佳设计选择是什么?

c++ - 直接列表初始化和复制列表初始化之间的区别

c++ - 如何在搜索中不使用 std::map 的自定义比较功能(map::find)?