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 に答える