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

How to create function whose type depends on a number of varidic arguments

我的目标是构建一个函数,将数组转换为 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;
}

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