知识卡片
标签分派选择实现
内容
标签分派把类型查询结果编码为标签参数,交给不同实现重载,使公开入口保持单一并保留转发能力。它在编译期区分整型索引与名称等路径;但构造函数还受隐式拷贝重载影响,不能仅凭入口分派解决全部抢占问题。
参考来源
- 位置:《Effective Modern C++》第5章《右值引用,移动语义,完美转发》,条款二十七:熟悉通用引用重载的替代方法(源文件:_epub-src/EPUB/text/ch006.xhtml)
- 结论依据:原文把单一公开入口和带标签的实现重载分开,再指出构造函数场景仍需约束候选。
- 原始内容:使用 tag dispatch 传递lvalue-reference-to- const 以及按值传递都不支持完美转发。如果使用通用引用的动机是完美转发,我们就只能使用通用引用了,没有其他选择。但是又不想放弃重载。所以如果不放弃重载又不放弃通用引用,如何避免在通用引用上重载呢? 实际上并不难。通过查看所有重载的所有形参以及调用点的所有传入实参,然后选择最优匹配的函数——考虑所有形参/实参的组合。通用引用通常提供了最优匹配,但是如果通用引…