c++ - 派生自同一类但不共享公共(public)方法的两个对象的类设计

标签 c++ oop

我有一组类,表示文件中字体格式的存储。每种字体定义一组字形(映射到 UTF32 代码的形状)。

字形可以用轮廓(在我的例子中是一组贝塞尔曲线)或位图来表示。

我的第一个想法是这将导致 GlyphOutline 和 GlyphBitmap 类继承自 Glyph。

这种设计的唯一问题是没有通用的方法。为了对这两个类做任何有用的事情,我需要使用 rtti (我宁愿避免)。

我的问题是:你能想出更好的方法来表示字形/是否有一些设计模式可以处理这种情况?

我试图让这种语言变得不可知,但如果有什么区别的话,我正在用 C++ 编写。

编辑:

我考虑过使用泛型,其中 Glyph 包含对一些/许多 GlyphRepresentations 的引用,其中 T 是轮廓或位图或您可以用来表示字形的任何其他内容。我实际上非常喜欢这个解决方案,因为它解决了由轮廓和位图表示的字形的问题。然而,它会强制使用 rtti。

如果我使用 C#,反射非常美妙,这可能是我会选择的解决方案,但在 C++ 环境中,我工作的 rtti 被实现为一组非常复杂的宏,我相信你可以了解我非常想避免

编辑:

在回答oli时,我在某种程度上同意你的观点,但是isa关系(如GlyphOutline是一个字形,并且可以做字形可以做的一切)是存在的,我认为这意味着应该有继承?我对此不太确定,似乎无论哪种方式都有很好的论据。

到目前为止,我首选的解决方案是访问者模式,但这只是一条评论,而不是自动取款机的答案,我想再等一会儿,看看是否有其他解决方案浮出水面。

最佳答案

听起来好像诸如drawOnScreen()getMetrics()getCodePoint()之类的方法是多态行为的良好候选者。

关于c++ - 派生自同一类但不共享公共(public)方法的两个对象的类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9429364/

相关文章:

c++ - 读取文本文件导致缓冲区末尾出现无效字符

c++ - 如何使用WIN32内核和VC++将位图图像拉伸(stretch)到某些特定的坐标?

php - 在 php 5.3 之前伪造后期静态绑定(bind)

java - 类型,类,接口(interface)的含义?

c++ - 在循环内/外创建对象 : allocation and speed

c++ - 具有这些要求的容器的正确名称是什么?

c++ - x86 架构中的指令解码

java - 单例模式的例子

c++ - 使用指针,不调用重写的方法

C++基类和派生类方法的麻烦