C中有两种不同的mixin模式. (mixin?CRTP?)
发布时间:2020-12-16 06:00:07 所属栏目:百科 来源:网络整理
导读:我正在研究mixins(C).我读了一些关于mixins的文章,发现C中有两种不同的“近似”混合模式. 模式1: templateclass Basestruct Mixin1 : public Base {};templateclass Basestruct Mixin2 : public Base {};struct MyType {};typedef Mixin2Mixin1MyType MyTyp
我正在研究mixins(C).我读了一些关于mixins的文章,发现C中有两种不同的“近似”混合模式.
模式1: template<class Base> struct Mixin1 : public Base { }; template<class Base> struct Mixin2 : public Base { }; struct MyType { }; typedef Mixin2<Mixin1<MyType>> MyTypeWithMixins; 模式2 :(可以称为CRTP) template<class T> struct Mixin1 { }; template<class T> struct Mixin2 { }; struct MyType { }; struct MyTypeWithMixins : public MyType,public Mixin1<MyTypeWithMixins>,public Mixin2<MyTypeWithMixins> { }; 他们几乎相等吗?我想知道模式之间的实际差异. 解决方法
不同的是可见性.在第一种模式中,MyType的成员直接可见和可用于mixin,而不需要投射,Mixin1的成员对Mixin2可见.如果MyType想要从混合中访问成员,则需要对其进行转换,并且没有一个很好的安全方法.
在第二种模式中,类型和混合之间没有自动可见性,但是mixins可以安全轻松地将其转换为MyTypeWithMixins,从而访问类型和其他混合的成员. (MyType也可以,如果你也应用了CRTP). 所以归结于方便和灵活性.如果你的mixin纯粹是从类型中访问服务,并且没有自己的兄弟依赖,那么第一个模式是很好直接的.如果mixin依赖于类型或其他混合提供的服务,您或多或少被迫使用第二种模式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |