两个参数的纯虚函数

时间:2013-04-08 10:04:59

标签: c++

当我需要根据对象的类型调用不同的函数时,我使用虚方法。但是当我有两个未知类型的物体时,我该怎么办?我有每种可能组合的代码,但实际调用它的最佳方法是什么?

示例

有一个抽象类Shape,它有后代,例如PointLinePolygonCircle。我们需要一个函数,它返回这些形状的最近点之间的最短距离,例如:

double shortestDistance(const Shape &first, const Shape &second);

没有办法简化这个问题(至少在我的情况下不是这样),以避免实际上必须为每个组合使用不同的代码。

我目前的解决方案是让Shape有一个纯虚方法返回它的实际类型(作为枚举),然后在两个嵌套的switch语句中使用这个值,然后对参数进行类型转换,最后调用特定组合的相应函数,比如这样:

switch (first.getType()) {
    case POINT:
        switch (second.getType()) {
            case POINT:
                return shortestDistancePointPoint((const Point &) first, (const Point &) second);
            case LINE:
                return shortestDistancePointLine((const Point &) first, (const Line &) second);
            ...
        }
    case LINE:
        switch (second.getType()) {
            ...
        }
    ...
}

虽然看起来有些笨拙且可能效率低下。那么,还有更好的方法吗?

0 个答案:

没有答案