如何知道個人容器包了幾層?

今天看到一個有趣的問題,請見下述例子:測試

cppvector<vector<int> > v2d;
vector<vector<vector<string>> > v3d;
vector<vector<vector<vector<double>>>> v4d;

若是給你 v2dv3d 或是 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

相關文章
相關標籤/搜索