gpt4 book ai didi

c - 为什么 hiredis 函数使用 void* 而不是 redisReply*?

转载 作者:行者123 更新时间:2023-12-04 01:42:41 26 4
gpt4 key购买 nike

我是 hiredis 的新手,使用的是 v0.13。我注意到 hiredis.h 中处理 redisReply* 对象的 API 函数都使用 void*。例如,

void *redisCommand(redisContext *c, const char *format, ...);

返回一个redisReply*对象(或NULL);

int redisGetReply(redisContext *c, void **reply);

通过reply输出一个redisReply*对象;

void freeReplyObject(void *reply);

根据代码注释,是一个“释放 hiredis 默认返回的回复对象的函数。”

我在这里遗漏了什么——为什么这些函数使用 void* 而不是 redisReply*

最佳答案

I noticed that the API functions from hiredis.h, which deal with redisReply* objects, all use void*

我能看到的解释你的描述的唯一明智的方法是你已经分析了实现以发现 在内部,它使用指向名为 redisReply 的类型的指针,但是接口(interface)通过 void * 类型处理此类指针。

这将是一种机制,用于强制该 API 的客户端将回复对象指针处理为 opaque values .客户端(大概)没有 redisReply 的定义,甚至没有它的名称,并且回复指针和该类型之间没有声明的关联,因此 API 明确避免为客户端提供一种方法通过 API 自身的函数以外的方式创建此类对象或解释或修改它们的值。他们所能做的就是从 API 接收那些不透明的指针并将它们传回。

不过,我还要说的是,这种针对不透明指针的特殊方法是一种糟糕的方法。可以在不放弃不透明度的情况下提供更好的类型安全性,如上面链接的问题的答案所示。

关于c - 为什么 hiredis 函数使用 void* 而不是 redisReply*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56704385/

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