美文网首页
模板与泛型 —— 模板模板参数

模板与泛型 —— 模板模板参数

作者: 从不中二的忧伤 | 来源:发表于2020-06-14 23:55 被阅读0次
    一、模板模板参数

    一、模板模板参数

    考虑在类模板中,有成员变量 : vector<T> myt;

    template<typename T>
    class Test
    {
    public:
        void setMyt(T t)
        {
            myt.push_back(t);
        }
        
        T getMyt(size_t i)
        {
            return myt[i];
        }
    
    public:
        vector<T> myt;
    };
    
    int main()
    {
        Test<int> t;
        t.setMyt(1);
        cout << t.getMyt(0) << endl;
        
        return 0;
    }
    

    vector 实际上是一个类模板,现在考虑,把类似vector, list 的类模板,当作模板参数,传入一个类模板中:

    • 此处的 Container 即是模板模板参数
    • vector 和 list,作为模板模板参数时,因为编译器无法确定默认的 allocator<T> 缺省参数,需要使用 using 设定包含vector 和 list 缺省参数的类型,将此类型作为模板模板参数。
    template<typename T>
    using MyVec = vector<T, allocator<T> >;
    
    template<typename T>
    using MyList = list<T, allocator<T> >;
    
    template <typename T, template<typename> class Container>
    class Test
    {
    public:
        void setMyt(T t)
        {
            myt.push_back(t);
        }
        
        T getMyt(size_t i)
        {
            return myt.back();
        }
    
    public:
        Container<T> myt;
    };
    
    int main()
    {
        Test<int, MyVec> t;
        t.setMyt(1);
        cout << t.getMyt(0) << endl;
        
        Test<char, MyList> tlist;
        tlist.setMyt('a');
        cout << tlist.getMyt(0) << endl;
        
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:模板与泛型 —— 模板模板参数

          本文链接:https://www.haomeiwen.com/subject/mtyqxktx.html