n维向量

时间:2012-10-28 00:59:55

标签: c++ templates

假设我想声明一个矢量向量的向量...(最多n维)。

像这样:

using namespace std;
// for n=2
vector<vector<int> > v2;
// for n=3
vector<vector<vector<int> > > v3;
// for n=4
vector<vector<vector<vector<int> > > > v3;

对于使用模板元编程的任意n,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:17)

是的,而且非常简单。

就像归纳证明一样,我们建立了一个递归的案例和一个(部分专门的)基础案例来结束递归。

template<size_t dimcount, typename T>
struct multidimensional_vector
{
    typedef std::vector< typename multidimensional_vector<dimcount-1, T>::type > type;
};

template<typename T>
struct multidimensional_vector<0,T>
{
    typedef T type;
};

multidimensional_vector<1, int>::type v;
multidimensional_vector<2, int>::type v2;
multidimensional_vector<3, int>::type v3;
multidimensional_vector<4, int>::type v4;