gpt4 book ai didi

c - 传递数据时隐藏实现细节

转载 作者:行者123 更新时间:2023-11-30 16:57:13 27 4
gpt4 key购买 nike

我什至不确定如何正确地提出有关此问题的问题。

我正在编写一个库,其中有多个实现(一个库中有多个库)。我想从客户端应用程序中隐藏尽可能多(如果不是全部)的实现细节,以便编写一个忽略实现细节的应用程序。

当实现包含在一个函数中时一切都很好。但是,我经常需要实例化库中的结构,使用库中的函数对其执行某些操作,继续正常编写应用程序,然后使用库中先前函数的数据返回到库中的函数。

结构细节仅对库函数很重要。因此,除了传递它们之外,我不需要从客户端应用程序中查看或触摸它们。

那么,有没有一种方法可以从客户端应用程序中隐藏结构详细信息,并且仍然能够使用它,或者是否有另一种方法可以通过某种形式的封装甚至某种只对可见的数据(全局变量?)来做到这一点图书馆?

这是我带有代码的蹩脚插图示例:

/*
library_private.h
*/
#if (A)
{
struct mystruct_t {
A *something;
}
}
#else
struct mystruct_t {
B *something;
}
#endif

/*
library_public.h
*/
struct mystruct_t;

/*
library.c
*/
struct mystruct_t* create() {

struct mystruct_t *handle = malloc(sizeof(struct mystruct_t));

return handle;
}

/*
client.h
*/

struct mystruct_t;
/* but, I need a definition, so I have to repeat either from library_private.h */

/*
client.c
*/

int main(int argc, char const *argv[]) {

struct mystruct_t *handle = create();

/*...*/

something(handle);

return 0;
}

最佳答案

返回时转换为 void *,并在传递到函数后立即返回到结构 mystruct_t。这不太好,因为您将失去一些编译器类型检查。

关于c - 传递数据时隐藏实现细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39649200/

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