Теперь, когда у нас есть ключевое слово auto
, я хотел бы получить адрес члена экземпляра класса без необходимости статически ссылаться на его класс.
например (старая школа)
MyInterestingClass & foo = m_holder.GetInteresting();
foo.SetEnableNotification(false);
ScopeGuard restore_notifications = MakeObjGuard(foo, &MyInterestingClass::SetEnableNotification, true);
// do stuf...
С++ 11 с использованием авто???
auto & foo = m_holder.GetInteresting();
foo.SetEnableNotification(false);
ScopeGuard restore_notifications = MakeObjGuard(foo, &foo.SetEnableNotification, true);
// do stuf...
Однако &foo.memfun не компилируется. Каков синтаксис/канонический подход к этому? Конечно, мы не хотим ссылаться на конкретный тип foo, если можем этого избежать, поскольку в противном случае auto
кажется действительно слабым соусом, не так ли?
&decltype(foo)::SetEnableNotification
? Я бы предположил, что это сработает - person Stephen Lin   schedule 14.03.2013auto restore_notifications = make_scope_guard([&]{ foo.SetEnableNotification(true); });
- person GManNickG   schedule 14.03.2013&decltype(foo)::SetEnableNotifications
->error C2039: 'SetEnableNotifications' : is not a member of '
global namespace''` - person Mordachai   schedule 14.03.2013::
послеdecltype(...)
всегда терпит неудачу. Один из обходных путей, который я видел, — это typedefdecltype(...)
, а затем ссылаться на вложенную вещь, используя typedef. - person Praetorian   schedule 14.03.2013