免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: myworkstation
打印 上一主题 下一主题

[C++] 【有奖讨论】随着 C++11 的巨大变化,谈谈你对新STL的展望 [复制链接]

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
1 [报告]
发表于 2015-07-05 18:46 |显示全部楼层
本帖最后由 yulihua49 于 2015-07-05 18:47 编辑
windoze 发表于 2015-07-01 14:37
回复 24# wwwsq

STL的通用性我觉得还好,至少里面的容器算法之类组件通用性还是很强的,也足够灵活。

STL在编译期的泛型还可以,运行期泛型就无能为力了。
我还是不得不造轮子解救运行期泛型的问题。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
2 [报告]
发表于 2015-07-06 11:22 |显示全部楼层
本帖最后由 yulihua49 于 2015-07-06 11:50 编辑
shenlanyouyu 发表于 2015-07-05 21:00
回复 26# yulihua49

可以借鉴COM的实现机制,缺点是COM实现不太好理解。

COM不懂。
C++支持反射就可以了,应该一切由可反射的基类派生出来。向JAVA那样。
自制可反射基类是个苦逼差事。
解决运行时处理未知对象的内部数据。

就可以写出这样的工具:

int RDB_insert(DB_handle *dbh,Object obj,String columns);
功能:把对象插入关系数据库。
参数:dbh:数据库句柄。
        obj:任意对象。实参的对象名代表表名。
        columns:列名列表,将obj中相应的成员插入数据库。可以为空,表示按数据库字典,把同名表的同名列插入数据库。
返回值:>=0:插入的行数,<0,出错。

这就是ORM,Object Relational Mapping。它开辟了一个广阔的新天地,比STL有用的多得多。
有谁能提供一个C++的ORM框架呢?

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
3 [报告]
发表于 2015-07-06 19:22 |显示全部楼层
本帖最后由 yulihua49 于 2015-07-06 19:45 编辑
windoze 发表于 2015-07-06 15:57
回复 29# yulihua49

如果你能把数据类型限制在有限的几个种类,用type switch能简单点。

这是你做的?不过还不是ORM,没有逃脱流式访问数据库的宿命。没办法做成JAVA的Hibernate那样的东西?

把结构体映射成数据库行。我已经实现了,它不能反射,我就它写一个说明书,纯C的。
这个“说明书”也可以称为“运行时模版”。它可用于结构的序列化/反序列化,也可以映射数据库。
还可以配合自制的容器,如BB_Tree,Multi_Hash等进行内存数据库管理。
感觉一旦实现了这个映射,就打开了通向世外桃源之路。
所以我希望C++尽快实现对象反射,这是根本性的升级。
有了对象反射,说实在的,STL没啥用。
运行时泛型,比编译时泛型,好得。。。。根本不是一个世界。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
4 [报告]
发表于 2015-07-07 13:30 |显示全部楼层
本帖最后由 yulihua49 于 2015-07-07 13:56 编辑
windoze 发表于 2015-07-06 20:52
回复 34# yulihua49

反射和TMP……完全不是一种东西么,一个是纯运行时,一个是纯编译时。

STL吧?
STL:任意对象
加入map,检索map,迭代map
ORM:任意表(或SQL)
插入数据库,检索数据库,fetch数据库。

ORM的基础是OM,Object mapping ---- 对象反射。
有了OM,不仅可以ORM,也可以动态对象处理,类似STL的工作,可以运行时处理。
所有STL那些功能,可以建立运行时库,就是框架,像JAVA那样。可以不在编译期处理了----把STL改成运行时。


这个想法的来源,一个哥们看了我的SRM --- Struct Relational Mapping,问我,为什么不弄成STL那样---他极其崇拜STL。
我看了一下STL,感觉完全不是一回事。原因呢,一个是运行时,一个是编译时。
还有,一个是在对象之外处理对象,如把它加入vector,map什么的,一个是在结构(对象)之内处理他的内容。
但是他们也有相似之处,如开头所示。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
5 [报告]
发表于 2015-07-07 19:58 |显示全部楼层
本帖最后由 yulihua49 于 2015-07-09 21:15 编辑
windoze 发表于 2015-07-07 14:26
回复 36# yulihua49

TMP是指template meta-programming

类似的东西,有个RTMI?
还有个XDR,但是都不能做SRM。
所以,这个轮子,不能不造。
现在,不管访问什么数据库,我一律SRM,决不再用OCI,PRO*C,CLI  什么的。

http://bbs.chinaunix.net/thread-4153426-1-1.html

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
6 [报告]
发表于 2015-07-11 15:36 |显示全部楼层
本帖最后由 yulihua49 于 2015-07-11 15:38 编辑
陌路巨额投入 发表于 2015-07-11 15:25
1、你是否完整的了解过C++98: 2003 标准下的STL设计和实现,并且对你产生了怎么样的影响?
           说实 ...对于STL的未来你的预期是什么样的?
     期待一些实用的STL进入C++标准,另外STL也可以继续扩展范围,涵盖更多常用的功能,比如file system,函数调用、增强并行处理功能之类。


你没发现需要涵盖关系数据库?我感觉这个最需要了。
数据库泛型。
还有就是序列化/反序列化的工作。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
7 [报告]
发表于 2015-07-11 15:41 |显示全部楼层
本帖最后由 yulihua49 于 2015-07-11 17:33 编辑
陌路巨额投入 发表于 2015-07-11 15:25
1、你是否完整的了解过C++98: 2003 标准下的STL设计和实现,并且对你产生了怎么样的影响?
           说实 ...3、你对C++11标准下的STL有什么样的期望,新的STL特性目前有使用吗?
          对于新的STL的期望,能够出一些实用简单的类库,方便外部调用


类库里不知道外边的数据结构,这个就需要运行时模版了。离数据库泛型一步之遥。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
8 [报告]
发表于 2015-07-31 19:17 |显示全部楼层
本帖最后由 yulihua49 于 2015-07-31 19:21 编辑
jieforest 发表于 2015-07-12 22:55
1、你是否完整的了解过C++98: 2003 标准下的STL设计和实现,并且对你产生了怎么样的影响?
基本上都熟悉吧 ...2)现有的“轮子”不能完全满足需求
这种情况下,我们可以基于现有的库进行扩展开发;也可以重新造一个轮子。

我就干过一次用自己的轮子替换STL。STL效率太低了,在迭代map时。
那个项目因效率太低无法投产而被改造,改造后效率够了,投产。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
9 [报告]
发表于 2015-08-03 14:59 |显示全部楼层
本帖最后由 yulihua49 于 2015-08-03 15:04 编辑
jieforest 发表于 2015-08-03 13:57
回复 47# yulihua49

主要发现map迭代比较慢。比如我需要找<,<=key 的,map不提供这种操作,用lowbound,再iterator--,极慢。
自己实现的,提供GT,GTEQ,LT,LTEQ操作,直接定位,效率高了很多。
再说我这个轮子造了很多年了,可能比STL的历史还要悠久,用在很多项目中,已经非常成熟可靠高效的了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP