gpt4 book ai didi

c - 结构中的函数

转载 作者:太空狗 更新时间:2023-10-29 16:23:05 25 4
gpt4 key购买 nike

结构可以包含函数吗?

最佳答案

不,但它们可以包含函数指针。

如果您的意图是在 C 中进行某种形式的多态性,那么是的,可以做到:

typedef struct {
int (*open)(void *self, char *fspec);
int (*close)(void *self);
int (*read)(void *self, void *buff, size_t max_sz, size_t *p_act_sz);
int (*write)(void *self, void *buff, size_t max_sz, size_t *p_act_sz);
// And data goes here.
} tCommClass;

上面的 typedef 是我为通用通信库创建的结构。为了初始化变量,您将:

tCommClass *makeCommTcp (void) {
tCommClass *comm = malloc (sizeof (tCommClass));
if (comm != NULL) {
comm->open = &tcpOpen;
comm->close = &tcpOpen;
comm->read = &tcpOpen;
comm->write = &tcpWrite;
}
return comm;
}

tCommClass *makeCommSna (void) {
tCommClass *comm = malloc (sizeof (tCommClass));
if (comm != NULL) {
comm->open = &snaOpen;
comm->close = &snaOpen;
comm->read = &snaOpen;
comm->write = &snaWrite;
}
return comm;
}

tCommClass *commTcp = makeCommTcp();
tCommClass *commSna = makeCommSna();

然后,调用函数,像这样:

// Pass commTcp as first params so we have a self/this variable
// for accessing other functions and data area of object.
int stat = (commTcp->open)(commTcp, "bigiron.box.com:5000");

通过这种方式,单一类型可以用于 TCP、SNA、RS232 甚至载体 pidgeons,具有完全相同的接口(interface)。

关于c - 结构中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4222661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com