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;
}