知识卡片

约束转发入口

普通读书笔记卡 · 1424

内容

通用引用与重载冲突时,可用不同函数名、按值或常量引用传参简化接口,也可用 tag dispatch 分派,或 enable_if 限定模板参与条件。C++1114 语境中,这些方案是在转发效率与可用性间取舍,不是所有入口都必须完美转发。

参考来源

- 位置:《Effective Modern C++》第5章《右值引用,移动语义,完美转发》,条款二十七:熟悉通用引用重载的替代方法(源文件:_epub-src/EPUB/text/ch006.xhtml) - 结论依据:原文列出改名、按值/常量引用、标签分派与 enable_if 等替代方案,不涉及后来的 concepts。 - 原始内容:通用引用和重载的组合替代方案包括使用不同的函数名,通过lvalue-reference-to- const 传递形参,按值传递形参,使用 tag dispatch 。 通过 std::enable_if 约束模板,允许组合通用引用和重载使用,但它也控制了编译器在哪种条件下才使用通用引用重载。 通用引用参数通常具有高效率的优势,但是可用性就值得斟酌。