file a.h
#ifndef A_H
#define A_H
#include "B.h"
#include <iostream>
class A{
public:
A(){
m_b = new B();
m_b->SetCallback(this,callBack);
m_b->Loop();
}
static void callBack(void* parm, int data){
((A*)parm)->Put();
std::cout <<"Data is "<<data<<std::endl;
}
void Put()
{
std::cout << "This is class A"<<std::endl;
}
private:
B* m_b;
};
#endif // A_H
file b.h
#ifndef B_H
#define B_H
class B{
typedef void (*pCallback)(void* param, int data);
public:
B(){}
void Loop()
{
for(int i = 0; i < 100; ++i)
{
m_ck(m_param, i);
}
}
void SetCallback(void* param, pCallback callback)
{
m_param = param;
m_ck = callback;
}
private:
pCallback m_ck;
void* m_param;
};
#endif // B_H