免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10918 | 回复: 10
打印 上一主题 下一主题

不透明类型(opaque data structure) [复制链接]

论坛徽章:
1
午马
日期:2013-08-23 23:39:47
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-25 19:50 |只看该作者 |倒序浏览
typedef struct sqlite3 sqlite3;
c语言也玩抽象。

论坛徽章:
0
2 [报告]
发表于 2009-08-26 06:49 |只看该作者
一直没搞明白不透明类型

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
3 [报告]
发表于 2009-08-26 08:27 |只看该作者
玩的就是抽象。
这样才能功能强大啊

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
4 [报告]
发表于 2009-08-26 12:37 |只看该作者
原帖由 phy0077 于 2009-8-25 19:50 发表
typedef struct sqlite3 sqlite3;
c语言也玩抽象。


这样的结构里的成员不能直接访问,只能通过函数访问,类似 C++ 里的数据封装。

论坛徽章:
0
5 [报告]
发表于 2009-09-01 17:32 |只看该作者
为什么不能访问?

论坛徽章:
0
6 [报告]
发表于 2009-09-01 17:46 |只看该作者
C & C++ Code Capsules 一书里介绍了封装,讲得挺不错,有兴趣可以看一看。

论坛徽章:
0
7 [报告]
发表于 2009-09-01 18:25 |只看该作者
这是类型定义,怎么就成封装了呢,
你要是不typedef,那每次都还得写那个struct,你不嫌麻烦啊!

论坛徽章:
0
8 [报告]
发表于 2009-09-01 18:26 |只看该作者
原帖由 zhujiang73 于 2009-8-26 12:37 发表


这样的结构里的成员不能直接访问,只能通过函数访问,类似 C++ 里的数据封装。


谁告诉你不能直接访问?别在这里妖言惑众,我看本论坛最近弱智贴很多,原来是某个培训机构的那些学生们都来了,靠!

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
9 [报告]
发表于 2009-09-01 20:57 |只看该作者

回复 #8 MrLegend 的帖子

原帖由 MrLegend 于 2009-9-1 18:26 发表
我看本论坛最近弱智贴很多


同感

论坛徽章:
24
狮子座
日期:2013-12-31 10:48:0015-16赛季CBA联赛之吉林
日期:2016-04-18 14:43:1015-16赛季CBA联赛之北控
日期:2016-05-18 15:01:4415-16赛季CBA联赛之上海
日期:2016-06-22 18:00:1315-16赛季CBA联赛之八一
日期:2016-06-25 11:02:2215-16赛季CBA联赛之佛山
日期:2016-08-17 22:48:2615-16赛季CBA联赛之福建
日期:2016-12-27 22:39:272016科比退役纪念章
日期:2017-02-08 23:49:4315-16赛季CBA联赛之八一
日期:2017-02-16 01:05:3415-16赛季CBA联赛之山东
日期:2017-02-22 15:34:5615-16赛季CBA联赛之上海
日期:2017-11-25 16:17:5015-16赛季CBA联赛之四川
日期:2016-01-17 18:38:37
10 [报告]
发表于 2009-09-01 21:38 |只看该作者
原帖由 MrLegend 于 2009-9-1 18:26 发表


谁告诉你不能直接访问?别在这里妖言惑众,我看本论坛最近弱智贴很多,原来是某个培训机构的那些学生们都来了,靠!


不告诉你结构体里成员的名字,访问?你要先找到他们。

参见: http://blog.csdn.net/peteryxk/archive/2009/01/02/3685890.aspx

1.      基于句柄(opaque data structure)的操作

struct __log4c_appender;    // opaque data structure

typedef struct __log4c_appender log4c_appender_t; // 以后,所有客户的访问要以此类型作为句柄,通过提供的接口进行操作。(针对这种opaque data structure,只能定义这些类型的指针,不能定义值,因为定义值需要知道结构体的确切大小和field的layout状况)

可进行的操作如下:

// appender的创建和销毁接口

LOG4C_API log4c_appender_t* log4c_appender_get(

const char* a_name);

LOG4C_API log4c_appender_t* log4c_appender_new(

const char* a_name);

LOG4C_API void log4c_appender_delete(

log4c_appender_t* a_appender);



// appender的各种accessor

LOG4C_API const char* log4c_appender_get_name(

const log4c_appender_t* a_appender);

LOG4C_API const log4c_appender_type_t* log4c_appender_get_type(

const log4c_appender_t* a_appender);

LOG4C_API const log4c_layout_t* log4c_appender_get_layout(

const log4c_appender_t* a_appender);

LOG4C_API void* log4c_appender_get_udata(

const log4c_appender_t* a_appender);

LOG4C_API const log4c_appender_type_t* log4c_appender_set_type(

log4c_appender_t* a_appender,

const log4c_appender_type_t* a_type);

LOG4C_API void* log4c_appender_set_udata(

log4c_appender_t* a_appender, void* a_udata);

LOG4C_API const log4c_layout_t* log4c_appender_set_layout(

    log4c_appender_t* a_appender,

    const log4c_layout_t* a_layout);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP