今天看到一個有趣的問題,請見下述例子:測試
cppvector<vector<int> > v2d; vector<vector<vector<string>> > v3d; vector<vector<vector<vector<double>>>> v4d;
若是給你 v2d
、v3d
或是 v4d
,你如何求得它們所包裹的層數?3d
萬能的模板又要上場了:code
cpptemplate<class Y> struct s { enum {dims = 0}; }; template<class Y> struct s<std::vector<Y>> { enum {dims = s<Y>::dims + 1}; };
來測試一下吧:string
cppstd::vector<std::vector<double> > x; int n = s<decltype(x)>::dims; // n == 2;
這都屬於 「乍看不難,細思恐極,模板棒喝」 的典型工程問題。。。模板
PS:搞圖形的同志們應該會用得上~class