c++ - 如何在 C++ 中使用代理类执行 "opt-in"接口(interface)?

标签 c++ interface polymorphism

我有 5 个名为 A B C D E 的类和 2 个接口(interface) I1 I2。使用多重继承,我可能会继承抽象类来实现接口(interface):

A 类:public I1, I2 {};


现在,我想添加更多接口(interface)I3 I4 I5

必须修改所有 5 个类定义是乏味的,并且违反了作为编程原则的 Don't Repeat Yourself

我如何实现接口(interface)代理类来封装接口(interface)的多态端而不是抽象基类的多重继承?

换句话说,我想在不使用继承的情况下将一个类转换为一个接口(interface)类。类型运算符重载是否适合这里?或者,也许每个类使用一个构造函数会很好? 目标是尽量减少代码重复。

最佳答案

我看到这个问题如下:

  • A、B、C 类...是文档类型,例如 JPG、DOC、RTF、XML、PDF...
  • 接口(interface) I1、I2、I3,...作为文档通用的功能,如 IPrint、ISaveToFile、ICompress。

因此,每个文档 A、B、C... 都需要实现这些接口(interface)才能提供这些功能。

如果我已经正确描述了您的要求,您可以使用 Design Pattern : Visitor .

此外,如果这符合您的要求,我可以详细介绍。

关于c++ - 如何在 C++ 中使用代理类执行 "opt-in"接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37582785/

相关文章:

c# - 在 C# 中使用泛型创建数学库

c++ - 运算符重载 "new"C++

C++。如何使用 std::regex 替换括号(和括号)内的任何内容?

c++ - 在扩展模式下将 DirectX 窗口从一台显示器移动到另一台显示器

javascript - 在 Javascript 中找到距离半圆中心 n% 的点?

c# - 接口(interface)参数

haskell - GHC 如何使用 Num 实例将多态数字文字转换为任意类型?

python - 在使用 OOP 尝试钻石形状问题时,Python 中发生了什么

string - 是否有不加引号的多态 `toString` 函数?

c++ - 是否可以在使用 D3DXCreateTextureFromFileInMemoryEx 创建的一个位置中的两个纹理之间逐步进行 alpha 混合?