假设我想声明一个向量的一个向量的一个向量的向量...(最多 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 执行此操作?
是的,而且非常简单。
很像归纳证明,我们建立了一个递归案例和一个(部分特化的)基本案例来结束递归。
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;