August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
大多数情况下,只有模板参数满足特定要求时模板才有意义。例如,Vector通常提供拷贝操作,如果是这样,它就必须要求其元素是可拷贝的。即,必须要求Vector的模板参数不能仅是一个typename,而应是一个Element。“Element”指出了可以成为元素的类型应满足什么要求:
其中template<Element T>是数学上“对所有T,满足Element(T)”的C++表达。即Element是一个谓词,它检查T是否具有Vector要求的所有性质。这种谓词被称为概念(concept,参见7.2节)。概念所说明的模板参数称为约束参数(constrained argument),参数约束的模板称为约束模板(constrained template)。
实例化模板时使用的类型如果不满足要求,就会导致一个编译时错误。例如:
由于在C++20之前C++不会官方支持概念,因此旧代码会使用非约束模板参数,而将要求放在文档中。
Read now
Unlock full access