模板与泛型编程
April 24, 2022About 2 min
模板与泛型编程
定义模板
函数模板
- 在模板定义中,模板参数列表不能为空
template<typename T>
- 模板程序应该尽量减少对实参类型的要求,减少特定使用,如调用泛型类中某个函数。
- 函数模板和类模板成员函数的定义通常放在头文件中。
- 保证传递给模板的实参支持模板所要求的操作,以及这些操作在模板中能正确工作,是调用者的责任。
示例代码
类模板
一个类模板的每个实例都形成一个独立的类。类型Blob<string>
与任何其他Blob
类型都没有关联,也不会对任何其他Blob
类型的成员有特殊访问权限
我们既可以在类模板内部,也可以在类模板外部为其定义成员函数,且定义在类模板内的成员函数被隐式声明为内联函数
声明:
ret-type StrBlob::member-name(parm-list)
定义:
template <typename T>
ret-type Blob<T>::member-name(parm-list)
默认情况下,对于一个实例化了的类模板,其成员只有在使用时才被实例化。
C++11中可以直接设置别名
template <typename T>
using BlobT = Blob<T>;
BlobT<std::string> a;
与任何其他static数据成员相同,模板类的每个static数据成员必须有且仅有一个定义。
类似任何其他成员函数,一个static成员函数只有在使用时才会实例化
示例代码