2016-05-03 4 views
1

私はusingを使用して、この構文を使用してC++ 11でメソッドポインタをtypedefするにはどうすればよいですか?

class A { 
    ... 
}; 
typedef void (A::*MethodPtr)(); 

を書きたいと思います。どうすればいい?

type_traitsを使用する場合と使用しない場合の両方の回答があります。

(定期的な機能のための答えがここで見つけることができます:How do I typedef a function pointer with the C++11 using syntax?を)実際には、関数ポインタと非常によく似

+2

'type_traits'にはどんな利点がありますか?なぜあなたがそれを使いたいのか分かりません。 – anatolyg

+8

それがどのように役立つかについては、関連するhttp://stackoverflow.com/questions/16498969/how-do-i-typedef-a-function-pointer-with-the-c11-using-syntaxを参照してください。私はそれがここでも助けてくれるかもしれないと思います。 – Danra

答えて

6
using MethodPtr = void (A::*)(); 

1
using MethodPtr = void (A::*)(); 
1

(あなたが逆の機能へのメンバ関数へのポインタから行くが、ことができませんでした)ここに直接便利です<type_traits>には何もありません。

template <class C, class T> 
using mem_ptr_t = T C::*; 

だから、タイプvoid()の関数であるAへのポインタを作成するだけである:しかし、我々はadd_pointerの私たち自身のメンバーのバージョンを書くことができ

単純なアプローチよりも詳細です
using MethodPtr = mem_ptr_t<A, void()>; 

、しかし、あなたが尋ねたので!

+1

'mem_ptr_t'はより簡潔な名前になります。 – Yakk

関連する問題