如何创建类型取决于多个可变参数的函数
我的目标是构建一个函数,将数组转换为给定维度作为可变参数的 n 维向量。
例如对于二维。
template<T>
vector<vector<T>> from_array(T *array, size_t d1, size_t d2) {
auto v = vector<vector<T>();
v.reserve(d2);
for (n = 0; n < d2; n++) {
vector(array, array + size)
}
}
我已经用谷歌搜索了一段时间,似乎我想要Homogeneous variadic function parameters,但它们在 C++ 中不可用。但也许有更简单的解决方案或解决方法?
似乎我也需要使用decltype,但我对 C++ 的经验几乎为零,所以我不确定如何使用它。
回答
如果您不介意颠倒大小参数的顺序(因此最外面的维度是第一个参数而不是最后一个参数),这是相当简单的:
template <class T>
auto from_array(const T*array, size_t d0) {
return std::vector<T>(array, array + d0);
}
template <class T, class... Sizes>
auto from_array(const T *array, size_t d0, Sizes... szs) {
std::vector<decltype(from_array(array, szs...))> ret;
ret.reserve(d0);
for (size_t i = 0; i < d0; ++i) {
ret.emplace_back(from_array(array, szs...));
array += (szs * ... * 1);
}
return ret;
}
但我同意评论中提到的将数组封装为多维访问器可能是更好的主意,而不是将其复制到一堆嵌套向量中。