【问题标题】:Comparing addresses of reference_wrappers比较reference_wrappers的地址
【发布时间】:2014-06-06 00:48:54
【问题描述】:

如何通过两个std::reference_wrappers 持有的引用来比较它们?我想看看两个std::reference_wrappers的引用是否相等。

编辑:抱歉混淆。我的意思是如何获取引用对象的地址并进行比较。

【问题讨论】:

  • r1.get() == r2.get()
  • 您想比较reference_wrappers 引用的对象的地址(如标题所示),还是比较对象本身是否相等(如问题主体所示)?

标签: c++ c++11 reference-wrapper


【解决方案1】:

get() 成员函数返回对所引用元素的引用。然后,您可以直接获取引用的地址。

std::addressof(r1.get()) == std::addressof(r2.get())

【讨论】:

  • 什么?不,参考文献没有地址。在这里你得到了裁判的地址,我什至不确定这是OP想要要求的。
  • @LightnessRacesinOrbit 对不起,我措辞不佳。我很确定 OP 想比较 addresses 因为问题标题。
【解决方案2】:

成员函数std::reference_wrapper::get 将返回它持有的引用。然后,您可以将两个引用的对象与:

const auto& a = ref_a.get();
const auto& b = ref_b.get();
if (a == b) {
    // …
}

当然,上面会在两个对象上调用operator==(如果类型是类类型)。

【讨论】:

  • @LightnessRacesinOrbit 我想帮助少数几个人之一that actually listens 并尝试改进他的代码。
  • 他显然听,否则他仍然不会发布 RTFM 帮助台问题。
猜你喜欢
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 2013-12-26
  • 2021-01-10
  • 2012-08-26
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
相关资源
最近更新 更多