【C++】関数へのポインタ、リロード関数へのポインタ、クラスメンバーへのポインタ

1450 ワード

  • 関数を指すポインタ関数のタイプは、その戻り値とパラメータリストによって決定されますが、関数は関数タイプを返すことはできません.
    int fce( const char*, ... );
    int fc( const char* );
    
    // point to fce
    typedef int (*PFCE)( const char*, ... );
    // point to fc
    typedef int (*PFC)( const char* );
    
    // Initialization
    PFCE pfce = fce;
    PFC pfc = fc;
    
    // Invoke the functions
    pfce();
    pfc();
  • リロード関数を指すポインタは、2つの関数ポインタタイプの間でタイプ変換できません.適切な関数を見つけるには、厳密に一致する必要があります.
    void ff( const char* );
    void ff( unsigned int );
    
    // Error: No Match, not available parameter list
    void (*pf)(int) = ff;
    // Error: No Match, not available return type
    double (*pf2)( const char* )) = ff;
  • クラスインスタンスメンバー関数を指すポインタクラスインスタンスメンバー関数を指すポインタは、パラメータタイプと個数、戻りタイプ、属するクラスタイプの3つの態様に一致する必要があります.
    class Screen
    {
    public:
    	int Add(int lhs, int rhs);
    	int Del( int lhs, int rhs );
    	void ShowNumber(int value);
    };
    
    typedef int (Screen::*OPE)( int, int);
    typedef void (Screen::*SHOW)( int);
    
    OPE ope = &Screen::Add;
    SHOW show = &Screen::ShowNumber;
    
    Screen scr;
    	
    // Invoke its own member
    int value = scr.Add(10, 20);
    scr.ShowNumber(value);
    
    // Invoke the function point
    value = (scr.*ope)(10, 20);
    (scr.*show)(value);
  • クラス静的メンバー関数を指すポインタクラス静的メンバー関数を指すポインタは、通常のポインタに属します.
    class Screen
    {
    public:
    	static int Add(int lhs, int rhs);
    };
    
    typedef int (*OPE)(int, int);
    
    OPE ope = &Screen::Add;
    
    int value = ope(10, 20);