加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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依赖于类型或其他混合提供的服务,您或多或少被迫使用第二种模式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读