如何在现代C++中返回指定维度与类型的多维vector?
在现代C++中实现n维vector类型生成
当然可以实现,核心思路是利用模板递归在编译期生成嵌套的std::vector类型。以下是具体实现方案:
1. 编译期生成n维vector类型
通过模板元编程定义类型别名,直接得到目标类型:
#include <vector> // 基础模板声明 template<int N, typename T> struct NDVector; // 终止条件:1维vector template<typename T> struct NDVector<1, T> { using type = std::vector<T>; }; // 递归生成n维vector template<int N, typename T> struct NDVector { using type = std::vector<typename NDVector<N-1, T>::type>; }; // 简化使用的模板别名 template<int N, typename T> using NDVector_t = typename NDVector<N, T>::type;
使用示例
NDVector_t<1, float>→ 等价于std::vector<float>NDVector_t<2, float>→ 等价于std::vector<std::vector<float>>NDVector_t<3, int>→ 等价于std::vector<std::vector<std::vector<int>>>
2. 生成空n维vector对象的函数
如果需要直接返回空的n维容器,可以封装一个函数:
template<int N, typename T> NDVector_t<N, T> createNDVector() { return {}; }
调用示例
int main() { auto vec1 = createNDVector<1, float>(); // 类型是std::vector<float> auto vec2 = createNDVector<2, float>(); // 类型是std::vector<std::vector<float>> auto vec3 = createNDVector<3, int>(); // 类型是std::vector<std::vector<std::vector<int>>> return 0; }
注意事项
- 这里的维度
N必须是编译期常量,因为C模板参数需要在编译时确定。如果需要支持运行时动态指定维度,无法返回静态类型的嵌套vector(C是静态类型语言),这种场景可以考虑使用std::variant或动态类型容器,但通常这类需求都是基于编译期确定维度的场景。
内容的提问来源于stack exchange,提问作者Fzza
相关产品推荐
相关产品推荐

