获取成员函数的地址而不用具体名称引用实例的类?

时间:2013-03-14 17:35:37

标签: c++ c++11 visual-studio-2012 auto

现在我们有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似乎确实是弱酱,不是吗?

1 个答案:

答案 0 :(得分:0)

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

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

我在一个简化的案例中尝试了它并且编译得很好。