如何创建类型取决于多个可变参数的函数
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;
}
但我同意以下评论,其中提到使用将数组视为多维的访问器封装数组可能是更好的主意,而不是将其复制到一堆嵌套向量中。
我的目标是构建一个函数,将数组转换为 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;
}
但我同意以下评论,其中提到使用将数组视为多维的访问器封装数组可能是更好的主意,而不是将其复制到一堆嵌套向量中。