问一个有关设计的有关问题
问一个有关设计的问题
这块有一个函数,通过传入一个xml节点,读取节点的所有属性:
后面是tinyxml库中的内容,前面是我类设计的成员变量
QuestionName = element->Attribute("QuestionName");
我类设计的成员变量有很多,但是xml节点里面有的属性可能没有。但是如果有的话就像都读到我类的成员里面去:
但是如果全都如下这么写的话:
QuestionFullName = element->Attribute("QuestionFullName");
QuestionDataType = element->Attribute("QuestionDataType");
QuestionType = element->Attribute("QuestionType");
UsageType = element->Attribute("UsageType");
CategoryOrder = element->Attribute("CategoryOrder");
由于都是string类型,要是属性没有会报错啊,请问应该怎么设计一下,有这个属性的给赋值,没有的话,给成员变量赋值为空?
------解决思路----------------------
你自己考虑下,如果没有这个值是返回错误还是说赋一个空值也可以接受呢。
------解决思路----------------------
TiXmlElement* child = element->FirstChildElement( "Child" );
if ( child )
{
}
------解决思路----------------------
你可以封装成你觉得方便的接口,而不是直接用原生接口。
例如你先执行一次初始化,把所有属性都收集到一个map里,然后你取值都是去map里获取,这样就可以避免你说的问题。
------解决思路----------------------
表格驱动吧
------解决思路----------------------
写个 宏
代码好看点
------解决思路----------------------
加个函数包装一下:
string GetAttribute(element, string strAttrName, string strDefaultValue="")// 声明
//实现
{
if (element->IsAttributeAvailable(strAttrName))
{
return element->Attribute(strAttrName);
}
return strDefaultValue;
}
这块有一个函数,通过传入一个xml节点,读取节点的所有属性:
后面是tinyxml库中的内容,前面是我类设计的成员变量
QuestionName = element->Attribute("QuestionName");
我类设计的成员变量有很多,但是xml节点里面有的属性可能没有。但是如果有的话就像都读到我类的成员里面去:
但是如果全都如下这么写的话:
QuestionFullName = element->Attribute("QuestionFullName");
QuestionDataType = element->Attribute("QuestionDataType");
QuestionType = element->Attribute("QuestionType");
UsageType = element->Attribute("UsageType");
CategoryOrder = element->Attribute("CategoryOrder");
由于都是string类型,要是属性没有会报错啊,请问应该怎么设计一下,有这个属性的给赋值,没有的话,给成员变量赋值为空?
------解决思路----------------------
你自己考虑下,如果没有这个值是返回错误还是说赋一个空值也可以接受呢。
------解决思路----------------------
TiXmlElement* child = element->FirstChildElement( "Child" );
if ( child )
{
}
------解决思路----------------------
你可以封装成你觉得方便的接口,而不是直接用原生接口。
例如你先执行一次初始化,把所有属性都收集到一个map里,然后你取值都是去map里获取,这样就可以避免你说的问题。
------解决思路----------------------
表格驱动吧
#define MP 10
class que;
struct prop{
string name;
string que::* v;
};
class que{
static prop mp[MP];
string name;
public:
void sync(XMLNode *node){
for(int i=0;i<MP;i++){
if(mp[i].name.empty()) break;
this->*mp[i].v =node->Attribute(mp[i].name);
}
}
};
ele que::mp[10]={
{"name",&que::name}
};
------解决思路----------------------
写个 宏
代码好看点
------解决思路----------------------
加个函数包装一下:
string GetAttribute(element, string strAttrName, string strDefaultValue="")// 声明
//实现
{
if (element->IsAttributeAvailable(strAttrName))
{
return element->Attribute(strAttrName);
}
return strDefaultValue;
}