我要执行以下操作,正在编写图形库。我希望我的课程应该是模板。

template < typename T>
class Graph
{
}


该Graph类适用于另一个class Vertex

我应该如何设计此Vertex类,以便我的任何团队成员都可以使用,而不必更改class Graph中的实现

基本上我希望这个Vertex类提供几个成员函数,例如getWeightgetvisitedsetvisited

因此,只要客户端在其中具有这些功能,类Graph类就可以直接使用

最佳答案

通常,图类不会做很多事情,因为所有数据都在顶点或边缘中(取决于对象表示的对象-听起来像您想要顶点对象)。

所以,你可能有

template< typename T >
struct Vertex {
    bool visited;
    T data;

    vector< Vertex * > edges;

    size_t getWeight() const { return edges.size(); }

    bool getvisited() const { return visited; }
    void setvisited( bool v ) { visited = v; }
};


您可能希望图形玻璃拥有所有顶点,并在尝试销毁它时防止出现断线或循环问题。

template< typename T >
struct Graph {
    typedef Vertex< T > vertex_t;
    deque< vertex_t > vertices;

    vertex_t &get_vertex() {
        return * vertices.insert( vertices.end(), vertex_t() );
    }
};


…并使Vertex的构造函数私有,并对其friend进行图形化处理,以使Graph是获得顶点的唯一方法。

关于c++ - C++设计模式建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3858550/

10-13 07:04