#include <iostream>
using namespace std;
struct IDelegate
{
~IDelegate() {}
virtual void UpdateDisplay(int) = 0;
};
class Display
{
private:
IDelegate* m_pDelegate;
public:
Display( IDelegate* pDelegate = NULL)
: m_pDelegate( pDelegate )
{
}
void MyFunc(int iSel)
{
if(m_pDelegate)
if(rand() & 1) //assume
m_pDelegate->UpdateDisplay(iSel);
}
};
///////
class PlaneDlg : public IDelegate
{
private:
Display m_display;
public:
PlaneDlg () : m_display ( this )
{
}
void UpdateDisplay(int iGrp)
{
// do something..
}
};
int main() {
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IElEZWxlZ2F0ZQp7Cgl+SURlbGVnYXRlKCkge30KCXZpcnR1YWwgdm9pZCBVcGRhdGVEaXNwbGF5KGludCkgPSAwOwp9OwoKY2xhc3MgRGlzcGxheQp7CnByaXZhdGU6CiAgIElEZWxlZ2F0ZSogbV9wRGVsZWdhdGU7CnB1YmxpYzoKICAgRGlzcGxheSggSURlbGVnYXRlKiBwRGVsZWdhdGUgPSBOVUxMKQogICAgOiBtX3BEZWxlZ2F0ZSggcERlbGVnYXRlICkKICAgewogICB9CgogICB2b2lkIE15RnVuYyhpbnQgaVNlbCkKICAgewogICAgICAgaWYobV9wRGVsZWdhdGUpCiAgICAgICAgICAgaWYocmFuZCgpICYgMSkgLy9hc3N1bWUKICAgICAgICAgICAgICAgbV9wRGVsZWdhdGUtPlVwZGF0ZURpc3BsYXkoaVNlbCk7CiAgIH0KfTsgCgovLy8vLy8vCgpjbGFzcyBQbGFuZURsZyA6IHB1YmxpYyBJRGVsZWdhdGUKewpwcml2YXRlOgogICBEaXNwbGF5IG1fZGlzcGxheTsKcHVibGljOgogICBQbGFuZURsZyAoKSA6IG1fZGlzcGxheSAoIHRoaXMgKQogICB7CiAgIH0KCiAgIHZvaWQgVXBkYXRlRGlzcGxheShpbnQgaUdycCkKICAgewogICAgICAgIC8vIGRvIHNvbWV0aGluZy4uCiAgIH0KfTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=