我使用的是一个只有纯虚方法的抽象基类,在C++中有一个接口行为(是的,我来自Java).就我的研究而言,这似乎是要走的路.
我必须抽象基类,GraphReader和Graph.
class Graph{
public:
Graph() {};
virtual ~Graph() {};
virtual void layout() = 0;
virtual std::vector<std::shared_ptr<Node>> getNodes() = 0;
virtual std::vector<std::shared_ptr<Edge>> getEdges() = 0;
protected:
};
class GraphReader{
public:
GraphReader(std::string fileName_) :
fileName(fileName_) {};
virtual ~GraphReader() {};
virtual Graph* read() = 0;
protected:
std::string fileName;
};
Run Code Online (Sandbox Code Playgroud)
这两个都有从GraphReader/Graph继承的派生类.
class OgdfGraph : public Graph{
public:
OgdfGraph();
virtual ~OgdfGraph();
void setOgdfGraph(ogdf::Graph &oGraph);
std::vector<std::shared_ptr<Node>> getNodes();
std::vector<std::shared_ptr<Edge>> getEdges();
void layout();
private:
[...]
};
class OgdfGmlReader : public GraphReader {
public:
OgdfGmlReader(std::string fileName);
virtual ~OgdfGmlReader(); …Run Code Online (Sandbox Code Playgroud)