c++ - Mixin 与 C++ 中的面向策略设计有何不同

标签 c++ mixins c++-concepts

我读过各种试图用 C++ 来解释 Mixins 的资料。

它们似乎都解释了 Mixin 的应用,这些应用看起来只不过是标准的面向策略的设计。

Link-1 Link-2

所以我的问题是:Mixins 是面向策略设计的同义词吗?或者 Mixins 及其在 C++ 中的应用还有更多内容吗?

最佳答案

它们是类似的解决方案。
无论如何,通常它们旨在解决略有不同的问题。

考虑下面的类:

template<PolicyDoX PX, PolicyDoY>
struct PolicyBased {
    void doSomething() {
        // ... A few operations
        PX::doX();
        // ... Some other operations
        PX::doY();
    }
};

这是一个简单的基于策略的方法。关键概念是该类期望策略提供(让我说)接口(interface)。这是实现的问题(他们将如何做到这一点),而不是实际提供的内容。
换句话说,该类的用户在功能方面不受给定策略的影响,因为 PolicyBased 在任何情况下都提供相同的接口(interface)。

另一方面,考虑一下:

struct X { int i; void f() {} }
struct Y { char c; void g() {} };
struct Z { void h() {} };

template<typename... T>
struct Mixin: T... {}

using Full = Mixin<X, Y, Z>;
using Partial = Mixin<X, Z>;

在这种情况下,当您使用不同的组件集时,mixin 会更改其界面。该类本身并不期望任何给定的功能集,只是将它们提供给最终用户。
因此,mixin 可以被视为一个桶,您可以将几乎所有组件放入其中以获取您喜欢的类型,并且该类型将具有严格依赖于所选组件的接口(interface)。

总结一下:

  • 策略定义如何执行某些操作,但不会影响接受它们的类的接口(interface)。

  • Mixin 一致创建一个具有自己接口(interface)的新类型,该接口(interface)由用于定义 mixin 的组件集给出。

关于c++ - Mixin 与 C++ 中的面向策略设计有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41647153/

相关文章:

c++ - 概念的重载/特化

c++ - 在 C++ 中使用 lambda 和 back_inserter 生成_n

c++ - NPP 和 CUDA 错误检查

sass - 在 Sass mixin 中跳过可选参数

html - CSS 属性作为 SASS 混合值

c++ - 使用 C++20 概念实现 Pair 概念

c++ - 每个文件的 seek_ptr 是唯一的吗?

css - 更少的 css 嵌套?

c++ - Range v3 中的 Readable 概念到底是什么?