Ответ 1
Да, и это довольно просто.
Как доказательство индукции, мы устанавливаем рекурсивный случай и (частично специализированный) базовый случай, который заканчивает рекурсию.
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;