使用可变参数模板连接多个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;
}
演示