想起来,从大二开始学习C++到使用,到目前也有近8年了,时间说起来还是挺长的,但要说起掌握多好,也未必有现在还在校的学生领悟得好:)
唯一有点感觉的设计,还是近些年先后从Delphi, Java,C#, Javasript,Ruby等其他语言体会来的。回过头来看C++的各种典型框架,多少有醍醐灌顶的感觉:),这些是以前在学校时候的总结,现在抽个时间记下来.
Mixin目前是我认为现代程序设计语言中类型构造的非常强有力的方案。从Interface implementation,Abstract class inherit 到 Mixin一路过来,出现了不少精彩的设计模式。类型构造在C++中有个强大的Template支持,很容易做到静态的Mixin.
Mixin可以看作具有aspect性质的单一功能模块,在C++中它表现为Instantiate time mixin或者Define time mixin,一些mixin的pagers并没有从已有成熟框架的角度来描述Mixin:
我这里给出ATL中Mixin的理解,mixin是对target class有implicit interface依赖的abstract/partial class.
C++ Template 中的Mixin模式:
(1) 把自身作为父类的template参数传入,此时表示把父类Mixin进自身,约束是父类要定义为Mixin Class,该父类有对外部传入的模板参数类型的接口有依赖;例如下面表示 B被mixin到A和TBase中,作为Mixin Class的B可以把template parameter作为聚合的类型,或是是被用于扩展的父类(如TBase)
template<typename TBase>
class A : public B<A, TBase>
{
}
(2)上面A和B的关系可以按2种情况理解,没有TBase,那么A作为target class,它将B mixin到自身;如果存在TBase,那么这个A本身也是作为一个Mixin,它除了把TBase这个target class传递给B,也把B mixin到自身,因此,这种可以通过继承的语法不断串连Mixin的方式就是Mixin Layer。在一些papers里面,Mixin layger是用精确的Nested class实现的。
唯一有点感觉的设计,还是近些年先后从Delphi, Java,C#, Javasript,Ruby等其他语言体会来的。回过头来看C++的各种典型框架,多少有醍醐灌顶的感觉:),这些是以前在学校时候的总结,现在抽个时间记下来.
Mixin目前是我认为现代程序设计语言中类型构造的非常强有力的方案。从Interface implementation,Abstract class inherit 到 Mixin一路过来,出现了不少精彩的设计模式。类型构造在C++中有个强大的Template支持,很容易做到静态的Mixin.
Mixin可以看作具有aspect性质的单一功能模块,在C++中它表现为Instantiate time mixin或者Define time mixin,一些mixin的pagers并没有从已有成熟框架的角度来描述Mixin:
我这里给出ATL中Mixin的理解,mixin是对target class有implicit interface依赖的abstract/partial class.
C++ Template 中的Mixin模式:
(1) 把自身作为父类的template参数传入,此时表示把父类Mixin进自身,约束是父类要定义为Mixin Class,该父类有对外部传入的模板参数类型的接口有依赖;例如下面表示 B被mixin到A和TBase中,作为Mixin Class的B可以把template parameter作为聚合的类型,或是是被用于扩展的父类(如TBase)
template<typename TBase>
class A : public B<A, TBase>
{
}
(2)上面A和B的关系可以按2种情况理解,没有TBase,那么A作为target class,它将B mixin到自身;如果存在TBase,那么这个A本身也是作为一个Mixin,它除了把TBase这个target class传递给B,也把B mixin到自身,因此,这种可以通过继承的语法不断串连Mixin的方式就是Mixin Layer。在一些papers里面,Mixin layger是用精确的Nested class实现的。