如何创建类型取决于多个可变参数的函数

我的目标是构建一个函数,将数组转换为给定维度作为可变参数的 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;
}

但我同意评论中提到的将数组封装为多维访问器可能是更好的主意,而不是将其复制到一堆嵌套向量中。


以上是如何创建类型取决于多个可变参数的函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>