Template metaprogramming is never easy.
Anyway. Here's a small template metaprogram that nests n vectors. (Requires partial template specialization.)
Code:
#include <vector>
// Recursive definition.
template<typename T, int N>
struct n_vector
{
typedef std::vector< typename n_vector<T, N-1>::type > type;
};
// Termination clause.
template<typename T>
struct n_vector<T, 1>
{
typedef std::vector<T> type;
};
Usage:
Code:
typedef typename n_vector<int, 3>::type my_vector;
// is equivalent to
// typedef std::vector< std::vector< std::vector< int > > > my_vector;