huaxiazhihuo

 

挖坑,有空填坑


先挖坑,计划写出一系列文章,探讨将c++用成动态语言,或者函数式语言,以达到快速开发的目的,并且在需要优化的情况下,又能够方便快速的优化。现在事务太多,不知道何时能填坑

宏的图灵完备,用宏生成代码,特别是反射,模式匹配,实在必不可少,以至于宏可以与c++的继承、template、exception等基本组件并列的重要必不可少的补充手段

最小巧方便使用的单元测试框架,比gtest,cppunit要好用很多

自定义内存管理器,stl中的allocator是作为模板参数来传递,尝试以tls来传递allocator参数,当然,必须相应的各种容器都要重写,修改其缺省构造函数,拷贝复制移动拷贝,给元素分配内存释放内存等。对了,还有各种容器的反射信息。每种类型的template的容器都有一个typeinfo对象,具体的容器又有自己独一的typeinfo对象

完善完备的reflection,也就是,其他language能够做的反射的事情,这里只要愿意,也可以做到,非侵入式,可以给int,double等基本类型添加反射,给template类型的也添加反射信息,保证每种类型的反射对象是唯一的;

史上功能最完善的fmt的实现,非template,当然,外层还需要variadic来包装,以类型信息。类型安全,缓冲安全,高效,通用。通用的意思是,可以fmt到文件,日志,字符串,文本框控件中;类型安全的意思是,可以是所有的类型都可以fmt,只要该类型实现了相应的接口,但是,这种接口是非侵入式的,通过模板特化。高效的意思是合sprintf系列一样。调用的时候如下:
fmt(text, "%s %s %d ", 20, 17.5, 'a'); //故意写错%s的,在这里,%s为通用符号
fmt(file, "{%s-}",{1, 2, 3}); //输出 1-2-3到文件中,也即是能够fmt容器对象,横线-为容器对元素的分隔符

带有切片功能的数组,此数组类型还支持子类型数组到基类型数组的隐式转换,也即是需要用到基类型数组的参数,子类型数组都可以适应

haskell的map,filter,fold算法在C++下的方便灵活组合性的改造,使用时,就好像C#的linq那么爽快,当然,没有lambda的参数自动推导,毕竟还不如

stackless协程

c++下的monad

wpf的依赖属性在c++下的实现,gui框架的不可缺少的要素

tupple的功能扩展,通过宏,不需要写类型,用起来就好像函数式语言原生的那么爽的可能

好像haskell或者f#那样的模式匹配的结构体

C++下完完全全实现狗语言的那种鸭子类型的接口

面向对象的深入探讨,对于企鹅或者鸡是一种鸟,继承了鸟,但是没有继承了会飞的接口,在编译期就能报错,在运行期也不能对其找到会飞的接口

具体类,基本类型,没有虚函数,但是又能实现接口的方式,是实实在在的接口,里面有纯虚函数,也即是非侵入式的实现接口,上面宇宙最强悍的fmt就是用到这里的技术

vistor模式和抽象工厂的解耦合,或者又叫,multi dispatch

类型安全的消息,一条消息就代表了一种函数调用,不是win32的那种一点也不安全的类型系统,然后可以向任何类发送消息,动态添加消息的反应,消息队列,消息和消息参数的保存,actor,command模式,redo或undo的轻松实现,消息广播

空基类优化的运用,除了多继承(ATL)或者内嵌类(MFC),还有其他方式,那是以组合方式,通过少量的模板和少量的宏,通过搭配组装(多继承空基类)各种基类,就能完成一个com组件

消息系统的构建,gui框架的编写

........

博大精深的c++!只是想说,上面的一切,在C++下全部都是可行的,当然,宏,template,多继承必须大用特用,只是,奇妙的是,主类的内存布局却很干净,甚至可以没有虚函数
不知道有生之年能否填完坑,以之为励吧!
c++的同学们也充分发挥想象力吧,太多的奇技淫巧了。

posted on 2016-05-09 20:36 华夏之火 阅读(1321) 评论(8)  编辑 收藏 引用 所属分类: c++技术探讨

评论

# re: 挖坑,有空填坑 2016-05-09 21:21 jigloo

我仿佛看了一个一只巨大的人形自走嘴炮。
http://eznewlife.com/focus_photos/100/2012_05_0131.jpg  回复  更多评论   

# re: 挖坑,有空填坑 2016-05-10 08:10 呵呵

你牛B,宏是祸患的根源,大量使用宏等于自寻烦恼。哪个软件宏用的比例大,哪个Bug无数,后期维护就明白了。  回复  更多评论   

# re: 挖坑,有空填坑 2016-05-10 10:03 华夏之火

老朽也排斥宏啊,但是,c++又没有反射,没有模式匹配,没有原生的tupple支持等等,在用这些好东西的时候,不用宏,就要写大量的重复代码。比如,f1函数返回值为tupple<int,string>。与其写:auto tt = f1();auto num=get<1>(tt);auto text=get<2>(tt);就不如用宏自动生成这三行代码,TUPPLE_VALUES(num,text,f1)  回复  更多评论   

# re: 挖坑,有空填坑 2016-05-10 16:51 Richard Wei

欢迎回来...  回复  更多评论   

# re: 挖坑,有空填坑 2016-05-10 18:20 华夏之火

@Richard Wei
一直都想回来的,不过,可能也来不了,很多代码要写,并且还不是用C++开发。很久没用C++了  回复  更多评论   

# re: 挖坑,有空填坑[未登录] 2016-05-10 20:47 Arthur

嗯,坑挖好了就可以把自己埋了...
记得挖深点哦  回复  更多评论   

# re: 挖坑,有空填坑[未登录] 2016-05-11 18:16 春秋十二月

你主要是做哪方面的开发?  回复  更多评论   

# re: 挖坑,有空填坑 2016-05-11 19:12 华夏之火

@春秋十二月
和c++无关的事情。C#,java,python,javascript等,主要还是C#  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(6)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜