Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;N维向量的模板别名_C++_Templates_Vector - Fatal编程技术网

C++ C++;N维向量的模板别名

C++ C++;N维向量的模板别名,c++,templates,vector,C++,Templates,Vector,我想要一些简单的N维向量包装器,比如vector,等等。更准确地说,我想在我的代码中写一些类似NDvector的东西,而不是vector。实现这一点最优雅的方式是什么?我的想法是写一些 template<size_t N, typename T> using NDvector = vector<NDvector<N-1, T>>; template<typename T> using NDvector<1,T> = vector<

我想要一些简单的N维向量包装器,比如
vector
,等等。更准确地说,我想在我的代码中写一些类似
NDvector
的东西,而不是
vector
。实现这一点最优雅的方式是什么?我的想法是写一些

template<size_t N, typename T>
using NDvector = vector<NDvector<N-1, T>>;

template<typename T>
using NDvector<1,T> = vector<T>;
模板
使用NDvector=vector;
模板
使用NDvector=vector;
但是,这个不能编译。

不能部分专门化

无法删除或删除别名模板

您可以添加一个可以部分专用的类模板。e、 g

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{
使用类型=向量;
};
模板
结构NDvector{
使用类型=向量;
};
模板
使用NDvector=typename NDvector_S::type;
然后你就可以把它当作

NDvector<3, double> v3d; // => std::vector<std::vector<std::vector<double>>>
NDvector v3d;//=>向量

也许,它不像我希望在理想世界中看到的那样优雅,但工作起来非常好!