2012-10-11 57 views
0

我需要这个项目的高层次的设计有点帮助。类层次环 - 高级设计建议

我手动创建基于XML的描述类的对象。它具有定义一块硬件设置的节点。麻烦的是XML中的节点可以简单地按名称指向其他节点。为了能够根据名称快速找到这些节点对象的地址,我使用了一个映射。这是简化的视图:

class XMLfile 
{ 
    public: 
     Node* GetNode(const string FeatName); //Searches through "nodes" map to get pointer to  Node 
    private: 
     map<std::string, Node*> nodes; 
}; 

然后我定义节点如下:

class Node 
{ 
    public: 
     virtual int GetValue(); 
     virtual int Load(XML_type); 
}; 

然后,取决于节点的确切“类型”,我创建几个派生类用另外的变量。

class Integer: public Node 
{ 
    int IntegerSpecificVar; 
    int GetValue(); 
    int Load(XML_type); 
    private:  
     int Value; 
     string p_Value; 
}; 

的XML可以是两个中的一个:

<Value>5</value> Which my object load will load 5 into int Value. 
or 
<p_Value>NodeName</p_Value> Which my object loader will load the string into p_Value. 

根据在XML对象上时,getValue()返回int值,或一个指向字符串与不同的节点名。如果它是一个指针,我需要获取指向该节点的指针,然后在该对象上调用GetValue。我真正想要做的就是调用XML :: GetNode(nodename“),但这是无关紧要的。

让我的节点对象访问该映射的一个想法是创建从XML文件派生的类节点:

class Node: public XMLfile 

然后我得到循环引用,因为它尚未加载如果我切换节点类和类之间XMLFILE的顺序,然后XMLFILE不知道Node类/类型是什么请注意,这是所有。在

一个大文件现在,如果有人能提供一般性的建议如何更好地安排这一点,将不胜感激。

+0

如何把一个XMLFILE指针的节点里面? –

回答

0

很糟糕的主意,认为NodeXMLfile一个指定的情况下,所以不要得出一个从其他。继承意味着A的关系 '是-A' B

0

快速和可能的解决方案脏:

  1. 使地图的GetValue的参数,或
  2. 商店(常数)引用或指针内Node地图。
+0

我明白这两个解决方案。但是什么是更合适的架构解决方案? – pyro