c – 将observer_ptr

据我所知,observer_ptr提议包括(in)与nullptr_t和交叉类型(即,observer_ptr< T>与observer_ptr< U>)比较的相等比较.没有与原始指针进行比较,当试图逐渐将其引入现有代码库时,这有点令人烦恼.

问题1:如果我添加这些运算符,您是否预见到任何严重问题(我在不同的命名空间中使用了单独的observer_ptr实现,完全根据当前提案建模,我不会将这些添加到std :: observer_ptr中)?

后续:如果添加运算符是一个坏主意,最好在observer_ptr上使用get()来比较原始指针,还是最好将原始指针显式地包装为observer_ptr?

编辑:显然它还不够清楚 – 我想知道为什么observer_ptr< T>缺少这些比较运算符.如果它只是一个遗漏,我可以将它们添加到我的实现中,并以我的快乐方式.如果这个选择背后有原因,我想了解它是什么,以及我是否足够谨慎以避免将这些操作符添加到我的班级.

最佳答案 编写一个独立的模板函数,比较observer_ptr< T>使用T *并在项目的任何地方使用它.然后,您可以在必要时使用.get()或ctor或其他内容更改实现.

点赞