我正在编写一个 xml 解析器,我需要将对象添加到一个类中,打开对象的实际类型。问题是,我想保留一个简单的接口 addElement(BaseClass*) 然后正确放置对象。
void E_TableType::addElement(Element *e)
{
    QString label = e->getName();
    if (label == "state") {
        state = qobject_cast<E_TableEvent*>(e);
    }
    else if (label == "showPaytable") {
        showPaytable = qobject_cast<E_VisibleType*>(e);
    }
    else if (label == "sessionTip") {
        sessionTip = qobject_cast<E_SessionTip*>(e);
    }
    else if (label == "logoffmedia") {
        logoffMedia = qobject_cast<E_UrlType*>(e);
    }
    else {
        this->errorMessage(e);
    }
}
这是调用类,一个对象工厂。myElement 是 E_TableType 的一个实例。
F_TableTypeFactory::F_TableTypeFactory()
{
    this->myElement = myTable = 0;
}
void F_TableTypeFactory::start(QString qname)
{
     this->myElement = myTable = new E_TableType(qname);
}
void F_TableTypeFactory::fill(const QString& string)
{
  // don't fill complex types.
}
void F_TableTypeFactory::addChild(Element* child)
{
    myTable->addElement(child);
}
Element* F_TableTypeFactory::finish()
{
    return myElement;
}
void F_TableTypeFactory::addAttributes(const QXmlAttributes &attribs) {
    QString tName = attribs.value(QString("id"));
    myTable->setTableName(tName);
}