在这里用c实现了类似于java的接口。
#include <stdio.h>
#include <stdlib.h>
#include <cassert>
typedef struct _Duck
{
void (*fly)(struct _Duck* b);
void (*quack)(struct _Duck* b);
}Duck;
typedef struct _DonaldDuck
{
Duck duck;
int donald_duck;
}DonaldDuck;
typedef struct _Turkey
{
void (*fly)(struct _Turkey* b);
void (*gobble)(struct _Turkey* b);
}Turkey;
typedef struct
{
Turkey turkey;
int wild_turkey;
}WildTurkey;
typedef struct _TurkeyAdapter
{
Duck duck;
Turkey* pTurkey;
int turkey_adapter;
}TurkeyAdapter;
void donald_duck_fly(Duck* pDuck)
{
printf("donald duck can fly long distance!\n");
return;
}
void wild_turkey_fly(Turkey* pTurkey)
{
printf("wild turkey can fly short distance!\n");
return;
}
void turkey_adapter_fly(Duck* pDuck)
{
TurkeyAdapter *pTurkeyAdapter = (TurkeyAdapter *)pDuck;
pTurkeyAdapter->pTurkey->fly(pTurkeyAdapter->pTurkey);