如何解决抽象类、抽象方法参数和继承
我参加了一个使用 OOQP library 的研究项目。它使用一个抽象类OoqpVector
(由几个子类继承)和许多方法,例如:
virtual double dotProductWith(OoqpVector& v) = 0
此方法由子类 SimpleVector
和 DistributedVector
实现。由于通用性,OoqpVector::dotProductWith
允许所有可能的组合:
SimpleVector.dotProductWith(SimpleVector)
DistributedVector.dotProductWith(DistributedVector)
SimpleVector.dotProductWith(DistributedVector)
DistributedVector.dotProductWith(SimpleVector)
但是在实践中,该方法仅在相同类型的向量上调用(组合 1 和 2)。因此,作者通过将参数动态转换到当前类型来实现 SimpleVector::dotProductWith(OoqpVector&)
和 DistributedVector::dotProductWith(OoqpVector&)
。
虽然这有效,但我觉得它有点难看,想知道我们是否可以在没有强制转换的情况下实现相同的行为。
一种选择是去掉 OoqpVector::dotProductWith
,声明专门的方法 SimpleVector::dotProductWith(SimpleVector&)
和 DistributedVector::dotProductWith(DistributedVector&)
,并强制调用方法将两种向量类型强加为相等。但是,我们的代码到处都使用了一堆 OoqpVector 并且相对通用,因此这可能很难实现。
你有没有办法解决这个问题?
最好的,
查理
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。