考虑以下内容:(Wandbox)
给定一个序列
如果有一种方法可以编写可重用的函数,使用给定的二元操作减少类似模板类的序列,例如,在上面的示例中使用
(如果我理解正确,相关的标准库算法(
#include <array>
#include <algorithm>
#include <iostream>
template<typename T, int N, int M>
auto concat(const std::array<T, N>& ar1, const std::array<T, M>& ar2)
{
std::array<T, N+M> result;
std::copy (ar1.cbegin(), ar1.cend(), result.begin());
std::copy (ar2.cbegin(), ar2.cend(), result.begin() + N);
return result;
}
int main()
{
std::array<int, 3> ar1 = {1, 2, 3};
std::array<int, 2> ar2 = {4, 5};
auto result = concat<int, 3, 2>(ar1, ar2);
for (auto& x : result)
std::cout << x << " ";
std::cout << std::endl;
return 0;
}
给定一个序列
std::array<T, length1>
, std::array<T, length2>
, ..., std::array<T, lengthK>
,我该如何推广上述代码并编写一个函数,将这个序列连接到 std::array<T, sum(lengths)>
中?如果有一种方法可以编写可重用的函数,使用给定的二元操作减少类似模板类的序列,例如,在上面的示例中使用
concat
,而不是编写特殊方法(每次二元操作更改都必须重新编写)。(如果我理解正确,相关的标准库算法(
accumulate
, reduce
)仅在二元操作结果的类始终相同时起作用。)
std::tuple_cat
。一个选项是简单地编写从结果元组到数组的转换。 - chris