我知道访问模式是什么,如何使用;这一问题不是。
我有一个图书馆,我在那里把大多数可改用的代码I写成,我与我的大多数项目联系起来。
我往往需要增加某些课程的特征,但是没有在图书馆增加这些新特点。 让我举一个真实的例子:
在这一校正I ve got a category Shape
, 继承者为CircleShape
,PolygonShape
和CompositeShape
。
我现在正在开发一种图形应用,如果我需要提供<条码>-Shape,但不想在核心<条码>render
功能将需要不同的执行)。
当然,最著名的办法是利用访客模式,但这引起了我的一些疑虑:
任何类别的图书馆都需要作为我的<代码>Shape加以扩展。 大部分公共图书馆(约占全部)没有为访客模式提供任何支持;为什么? 为什么我?
访客模式是在C++模拟双重派任的方式。 这在C++中不是本土的,需要明确实施,使班级接口更加复杂: 我不认为<代码>applyVisitor功能应当与我的班级职能相同,因此,我看上去,这好像是破碎的。
Explicitly up-casting Shape
with dynamic_cast
is more expensive, but to me it looks like a cleaner solution.
因此,我应该做些什么? 在我所有的图书馆课堂上实行双重派任? 提供<代码>Shape的图书馆是哪里的,但有些GPL图书馆在互联网上发现?