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

一、模板模板参数

一、模板模板参数

考虑在类模板中,有成员变量 : 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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。