【发布时间】:2019-01-15 05:03:00
【问题描述】:
自 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 中发挥了作用,但它实际上在容器中还有其他用途,如参考页面所述。是否有我遗漏的东西可以替代该用例,或者我在这种情况下遗漏了什么?
如果这个有用的特性被删除了,我们应该在需要的时候实现它,还是有什么原因导致整个模式不安全?
【问题讨论】:
-
唯一弃用和删除的是成员 typedefs。
-
谢谢,既然这个问题是一个简单的误解,你认为我应该关闭它,删除它,还是离开它?
-
@ChrisBeck 如果您有这种误解,那么其他人也会有这种误解并非不可能。保留它可能是合适的。
标签: c++ c++11 c++17 c++20 reference-wrapper