我是真正的C / C ++程序员,在这一刻我正在学习Ruby语言。
我正在尝试在ruby中创建模板类,但是Ruby没有泛型类或接口,所以我遇到了一个问题,如何编写等效的C ++图形类:
template <class V, class E> struct Graph {
//Graph edges struct
struct Ed : E {
//vertex number
int v;
Ed(E p, int w) : E(p), v(w) { }
};
//Graph vertex that is connected to vector of edges
struct Ve : V, vector<Ed> {};
// Vector of graph vertex that handle connection to other vertex
vector<Ve> g;
}
想法是让图表顶点和边缘继承自V类和E类。 图形应仅包含现有顶点的矢量,但顶点应该是通用的,因为它可以是例如城市对象或几何块,并且与边缘相同,例如街道对象。
所以我的想法是为每个类创建单独的包装器
def Graph
def initialize(*vertexes)
@vertexes = vertexes
end
end
def Vertex
def initialize(object, *edges)
@o = object
@e = edges
end
end
def Edges
def initialize(object, vertex)
@o = object
@v = vertex
end
end
但是,如果此解决方案提供从Edge和Vertex类访问整个方法的权限? 例如,Edge可以是Street对象,street可以有自己的方法,如:“speed_limit”,“capacity”或“check_availability”,我不知道如何处理这种情况,也不要在每个包装器中重写这些方法边缘和/或顶点类。