从 C++11 开始,std::reference_wrapper
它是一个小的“shim”模板,它是一种类类型,可以从引用类型构造并转换为引用类型。它可以在可能不支持引用的通用容器中使用。
https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper
std::reference_wrapper 是一个类模板,它将引用包装在可复制、可分配的对象中。它经常被用作将引用存储在通常不能保存引用的标准容器(如 std::vector)中的一种机制。
此标准库功能在 C++17 中已弃用,并在当前的 C++20 草案中被删除。为什么?
std::reference_wrapper
使用不安全或在某些方面存在缺陷?
在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0619r3.html#2.0
中,这似乎被认为是“D.8 旧自适应函数绑定”的一部分,并且标准描述中的文本在std::reference_wrapper
“D.9.2 Typedefs to Support Function Binders [depr.func.adaptor.typedefs]”部分中被划掉
看起来我们正在删除它,因为它在旧的函数绑定器 API 中发挥了作用,但它实际上在容器中还有其他用途,如参考页面中所述。有没有我遗漏的东西可以代替那个用例,或者我错过了关于这种情况的其他东西?
如果这个有用的特性被删除了,我们应该在需要的时候实现它,还是有某种原因表明整个模式是不安全的?