C++primer 阅读笔记-模板与泛型编程(成员模板)

成员模板

  • 一个类(类模板或者普通类)可以包含本身是模板的成员函数
  • 成员模板不能是虚函数

普通类的成员模板

  • 下例为一个类似于unique_ptr的默认删除器的类
  • 希望删除器适用于任何类型,所以将调用运算符定义为一个模板
  • 成员模板也是也模板参数列表开始
class DebugDelete{
    public:
        DebugDelete(std::ostream &s = std::err):os(s){}
        template<typename T> void operator(T *p) const
        {os << "deleting unique_ptr"<<std::endl;delete p;}
    private:
        std::ostream &os;
}
//销毁p指向的对象
//实例化DebugDelete::operator()<int>(int *);
unque_ptr<int, DebugDelete>p(new int, DebugDelete());

类模板的成员模板

  • 类和成员各有自己的、独立的模板参数
  • 在类模板外定义一个成员模板时,必须同时为类模板和成员模板提供模板参数列表。类模板参数列表在前,后跟成员模板参数列表

实例化与成员模板

  • 实例化一个类模板的成员模板,必须同时提供类和函数模板的实参

你可能感兴趣的:(C++Primer,成员模板,模板与泛型编程)