假设我有以下内容:
class Point : geometry {
...
Point(double x, double y) {
}
double distanceTo(Line) {
}
double distanceTo(Point) {
}
}
class Line : geometry {
...
Line(double x, double y, double slopex, double slopey) {
}
double distanceTo(Line) {
}
double distanceTo(Point) {
}
}
struct point_t {
double x, y;
}
struct line_t {
double x, y, slope_x, slope_y;
}
struct Geom_Object_t {
int type;
union {
point_t p;
line_t l;
} geom;
}
我想知道为像这样的函数定义调度表的最佳方法是什么
double distanceTo(Geom_Object_t * geom1, Geom_Object_t * geom2) {
}
类是用 C++ 编写的,但是 distanceTo 函数和结构必须是 C++
谢谢
最佳答案
我会让类图不同:一个抽象基类 GeomObject
,子类化 geometry
(带有 getType
访问器,以及纯虚拟 distanceTo
重载),以及 Line
的具体子类 Point
和 GeomObject
(覆盖访问器和重载)。 "extern C"
double distanceTo
函数的需要不是问题,因为无论如何您都不是在谈论该函数的重载:您只想返回 geom1.distanceTo(x)
(让虚拟表完成那部分工作;-)其中 x
是合适的类型转换,例如,假设我已经解释过的类图:
extern "C"
double distanceTo(Geom_Object_t * geom1, Geom_Object_t * geom2) {
if(geom2->getType() == POINT_TYPE) {
return geom1->distanceTo(static_cast<Point*>(geom2));
} else {
return geom1->distanceTo(static_cast<Line*>(geom2));
}
}
关于c++ - C++中的调度表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2076238/