#include <stdio.h>
#include <stdlib.h>
typedef struct _BodyBuilder
{
void (*play)();
} BodyBuilder;
typedef struct _BailPlaying
{
void (*play)();
} BailPlaying;
typedef struct _PlayRequest
{
int type;
void *pPlaying;
} PlayRequest;
#define BODY_BUILDER_TYPE 0
#define BAIL_PLAYING_TYPE 1
void person_playing(PlayRequest *pPlayRequest)
{
if ((NULL == pPlayRequest) || (NULL == pPlayRequest->pPlaying))
{
return;
}
switch (pPlayRequest->type)
{
case BODY_BUILDER_TYPE:
((BodyBuilder *)pPlayRequest->pPlaying)->play();
break;
case BAIL_PLAYING_TYPE:
((BailPlaying *)pPlayRequest->pPlaying)->play();
break;
}
}
void body_building()
{
printf("body building!\n");
}
int main()
{
BodyBuilder bodyBuilder;
bodyBuilder.play = body_building;
PlayRequest request;
request.type = BODY_BUILDER_TYPE;
request.pPlaying = &bodyBuilder;
person_playing(&request);
return 0;
}
C语言实现桥接模式
最新推荐文章于 2025-09-09 19:08:39 发布
这篇博客介绍了一种在C++中通过结构体和函数指针实现不同类型的对象调用相应行为的方法。代码示例展示了如何定义`BodyBuilder`和`BailPlaying`结构体,以及如何通过`PlayRequest`结构体来根据类型调用对应的`play`方法。在`main`函数中,创建了一个`BodyBuilder`实例,并通过`PlayRequest`调用了`body_building`函数。

379

被折叠的 条评论
为什么被折叠?



