RTTI还是虚函数标识符?

时间:2014-12-13 01:50:24

标签: c++ rtti

什么是更好的解决方案? RTTI,还是一个虚函数,它返回一个关于什么类的枚举值?

问题在于:

我有一个带有派生类的基础class GeometryPlace

  • CircleArc函数
  • 线段
  • Union(of GeometryPlaces)
  • (GeometryPlaces)部分
  • 平面
  • 半平面
  • HalfVolume
  • 等.....

然后,我有一个std::vector<GeometryPlace*>,我希望与所有这些GeometryPlaces相交。 因此,class GeometryPlace具有以下纯虚函数:

GeometryPlace *intersect(GeometryPlace *gp) = 0;
GeometryPlace *intersect(CircleArc *gp) = 0;
/// ... and so on

我使用这样的调度:

GeometryPlace *CircleArc::intersect(GeometryPlace *gp) { gp->intersect(static_cast<CircleArc*>(this)); }

但最后所有这些,需要知道,如果最终的GeometryPlace是Point,它的x,y,z是什么,或者它是否是其他东西。

在那个问题中,我想使用以下代码(而不是RTTI):

struct GeometryPlace
{
   enum class Type : char { CIRCLEARC, LINESEGMENT, SPHERE, etc.... };
   virtual Type getType() = 0;
}

那么,更好的是什么? RTTI还是这种方法?

0 个答案:

没有答案