使用可变参数模板连接多个std::array对象

我需要一个函数来实现以下功能:

template<typename T, std::size_t SIZE_L, std::size_t ...SIZE_R>
std::array<T, SIZE_L> concat(const std::array<T, SIZE_R...>&);

这应该将 RHS 上所有传递的数组连接成一个数组。SIZE_R 的总和应该与 SIZE_L 相同——如果可能的话,不需要手动指定 SIZE_L。

此数组的元素类型将始终为 double。

回答

使用默认的可构造函数T,你可以这样做(C++17):

template<typename T, std::size_t ...Ns>
std::array<T, (... + Ns)> concat(const std::array<T, Ns>&... arrs)
{
    std::array<T, (... + Ns)> res;
    std::size_t offset = 0;
    
    ((std::copy(arrs.begin(), arrs.end(), res.begin() + offset),
      offset += arrs.size()),
     ...);
    return res;
}

演示


以上是使用可变参数模板连接多个std::array对象的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>