现在我们有auto
个关键字,我希望能够获取类实例成员的地址,而不必静态引用它的类。
e.g。 (旧斯库尔)
MyInterestingClass & foo = m_holder.GetInteresting();
foo.SetEnableNotification(false);
ScopeGuard restore_notifications = MakeObjGuard(foo, &MyInterestingClass::SetEnableNotification, true);
// do stuf...
c ++ 11使用auto ???
auto & foo = m_holder.GetInteresting();
foo.SetEnableNotification(false);
ScopeGuard restore_notifications = MakeObjGuard(foo, &foo.SetEnableNotification, true);
// do stuf...
然而,& foo.memfun无法编译。这是什么语法/规范方法?当然,如果我们可以避免它,我们不想参考foo的具体类型,否则auto
似乎确实是弱酱,不是吗?
答案 0 :(得分:0)
这应该有效(至少在GCC 4.7.2中):
ScopeGuard restore_notifications = MakeObjGuard(foo,
&std::remove_reference<decltype(foo)>::type::SetEnableNotification, true);
我在一个简化的案例中尝试了它并且编译得很好。