先挖坑,计划写出一系列文章,探讨将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++的同学们也充分发挥想象力吧,太多的奇技淫巧了。