August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
一旦已经恰当地用接口说明了模板,那么可以基于其属性来进行重载,这和函数几乎一样。考虑标准库函数advance()(参见12.3节)的一个略微简化的版本,它向前推进迭代器:
编译器会选择具有实参能满足的最强要求的模板。在本例中,list只支持前向迭代器,而vector则提供随机访问迭代器,于是有:
类似其他重载,这是一种编译时机制,意味着不会有运行时额外开销,而且当编译器无法找到一个最佳选择时,它会给出一个歧义错误。基于概念的重载规则远比通用重载的规则(参见1.3节)简单。首先考虑单一实参有多个可选模板的情况:
·如果实参不匹配概念,则不会选择这个可选模板。
·如果实参只匹配一个可选模板的概念,则选择它。
·如果来自两个可选模板的实参对一个概念匹配得同样好,则产生一个歧义。
·如果来自两个可选模板的实参匹配同一个概念,而其中一个更为严格(匹配另一个的所有要求并满足更多要求),则选择它。
被选中的模板必须满足:
·与所有实参都匹配,且
·对所有实参都至少与其他可选模板匹配得一样好,且
·至少对一个实参匹配得更好。
Read now
Unlock full access