我想要一些像 vector<vector<vector<double>>>
等 N 维 vector 的简单包装器。更准确地说,我想在我的代码中编写类似 NDvector<3,double>
而不是 vector<vector<vector<double>>>
的东西。实现这一点的最优雅的方法是什么?我的想法是写一些类似的东西
template<size_t N, typename T>
using NDvector = vector<NDvector<N-1, T>>;
template<typename T>
using NDvector<1,T> = vector<T>;
但是,这个不能编译。
最佳答案
Type alias 不能部分特化;
您可以添加一个可以部分专门化的类模板。例如
template<size_t N, typename T>
struct NDvector_S {
using type = vector<typename NDvector_S<N-1, T>::type>;
};
template<typename T>
struct NDvector_S<1, T> {
using type = vector<T>;
};
template<size_t N, typename T>
using NDvector = typename NDvector_S<N, T>::type;
然后你可以用它作为
NDvector<3, double> v3d; // => std::vector<std::vector<std::vector<double>>>
关于N维 vector 的C++模板别名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59495350/