Как получить размеры (вложенность) вложенного вектора (НЕ размер)? Рассмотрим следующие объявления: vector<vector<int> > v2d; vector<vector<vector<string>> > v3d; Как я могу узнать "размерность" векторов в следующем коде? Например, 2 для v2d и 3 для v3d? Ответ 1 Что-то в этих строках: template<class Y> struct s { enum {dims = 0}; }; template<class Y> struct s<std::vector<Y>> { enum {dims = s<Y>::dims + 1}; }; Тогда, например, std::vector<std::vector<double> > x; int n = s<decltype(x)>::dims; /*n will be 2 in this case*/ Имеет ли свойство привлекательности все оценки во время компиляции. Ответ 2 Вы можете сделать что-то вроде этого: template<typename T> int getDims(const T& vec) { return 0; } template<typename T> int getDims(const vector<T>& vec) { return getDims(T{})+1; } Sidenote: эту величину иногда называют " rank".
Ответ 1 Что-то в этих строках: template<class Y> struct s { enum {dims = 0}; }; template<class Y> struct s<std::vector<Y>> { enum {dims = s<Y>::dims + 1}; }; Тогда, например, std::vector<std::vector<double> > x; int n = s<decltype(x)>::dims; /*n will be 2 in this case*/ Имеет ли свойство привлекательности все оценки во время компиляции.
Ответ 2 Вы можете сделать что-то вроде этого: template<typename T> int getDims(const T& vec) { return 0; } template<typename T> int getDims(const vector<T>& vec) { return getDims(T{})+1; } Sidenote: эту величину иногда называют " rank".