gpt4 book ai didi

c++ - C++ 中两种不同的 mixin 模式。 (混合?CRTP?)

转载 作者:IT老高 更新时间:2023-10-28 22:59:25 56 4
gpt4 key购买 nike

我正在研究 mixins(在 C++ 中)。我阅读了一些关于 mixins 的文章,发现了 C++ 中两种不同的“近似”mixins 模式。

模式 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 的成员对 mixins 直接可见和可用,无需任何强制转换,并且 Mixin1 的成员对 可见Mixin2。如果 MyType 想要访问 mixins 中的成员,则需要强制转换 this,并且没有一种安全的好方法。

在第二种模式中,类型和mixins之间没有自动可见性,但是mixin可以安全轻松地将this转换为MyTypeWithMixins,从而访问成员的类型和其他混合。 (MyType 也可以,如果你也应用了 CRTP。)

因此,它归结为便利性与灵 active 。如果您的 mixin 纯粹是从该类型访问服务,并且没有它们自己的兄弟依赖项,那么第一种模式很好且简单。如果一个 mixin 依赖于该类型或其他 mixin 提供的服务,那么您或多或少会被迫使用第二种模式。

关于c++ - C++ 中两种不同的 mixin 模式。 (混合?CRTP?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26486456/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com