0

现在我们有了auto关键字,我希望能够获取类实例成员的地址,而不必静态引用它的类。

例如(老派)

MyInterestingClass & foo = m_holder.GetInteresting();
foo.SetEnableNotification(false);
ScopeGuard restore_notifications = MakeObjGuard(foo, &MyInterestingClass::SetEnableNotification, true);
// do stuf...

c++11 使用自动???

auto & foo = m_holder.GetInteresting();
foo.SetEnableNotification(false);
ScopeGuard restore_notifications = MakeObjGuard(foo, &foo.SetEnableNotification, true);
// do stuf...

但是,&foo.memfun 无法编译。对此的语法/规范方法是什么?如果可以避免的话,我们当然不想引用具体类型的 foo ,否则auto似乎确实是弱酱,不是吗?

4

1 回答 1

0

这应该有效(至少在 GCC 4.7.2 中):

ScopeGuard restore_notifications = MakeObjGuard(foo,
    &std::remove_reference<decltype(foo)>::type::SetEnableNotification, true);

我在简化的情况下尝试了它,它编译得很好。

于 2013-03-14T17:44:42.697 回答