什么是更好的解决方案? RTTI,还是一个虚函数,它返回一个关于什么类的枚举值?
问题在于:
我有一个带有派生类的基础class GeometryPlace
:
然后,我有一个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还是这种方法?