c++コールバックの利用関数ポインタの例

2249 ワード

c++コールバックの利用関数ポインタの例
 
  
#include
using namespace std;


/************************************************************************/
/*                : CALLBACK                                        */
/************************************************************************/

typedef void (*CALLBACKFUN)(int a,int b);

class base
{
private:
    int m;
    int n;
    static CALLBACKFUN pfunc;
public:
    base():m(0), n(0){};
    void registercallback(CALLBACKFUN fun,int k,int j);
    void callcallback();
};

CALLBACKFUN base::pfunc=NULL;    /* static */

//
void base::registercallback(CALLBACKFUN fun,int k,int j)
{
    pfunc=fun;
    m=k;
    n=j;
}

void base::callcallback()
{
    base::pfunc(m,n);
}


下位レベルでコールバック関数を定義する場合は、次のインタフェースが必要です.
1.登録インタフェースを実現する:1つのインタフェースを上層に提供して、このインタフェースを通じて、上層はコールバック実現インタフェースを登録して、下層はこの実現インタフェースアドレスを定義のコールバックポインタ(CALLBACKFUN)に伝達して、この初期化動作は必要で、さもなくばコールバックを実現できない;
2.トリガインタフェース:このインタフェースはトリガ動作を提供し、インタフェースを呼び出すと、関数コールバックをトリガする.
 
  
// cbByfunction.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "cbByfunction.h"

/************************************************************************/
/*                                                            */
/************************************************************************/
void seiya(int a,int b)
{
    cout << "..." << a << "..." << b << endl;
    cout << "this is seiya callback function" <}

void zilong(int a,int b)
{
    cout<    cout<}

int main(int argc, char* argv[])
{
    //
    base c_base;
    c_base.registercallback(seiya, 5, 6);
    c_base.callcallback();
    c_base.registercallback(zilong, 7, 8);
    c_base.callcallback();
    return 0;
}