问一个有关设计的有关问题

问一个有关设计的问题
这块有一个函数,通过传入一个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;
}