CXmlParser
ParseXml()
CXmlTag
CExternalCaller
StartTag
EndTag
//XmlParserclass CXmlParser{public : template<class CALLER> void ParseXml(const string& rsXmlFile, CALLER* pCaller, void (CALLER::*pfStartTag)(CXmlTag* pTag), void (CALLER::*pfEndTag)(CXmlTag* pTag) );};template<class CALLER>void CXmlReader::ParseXml(const string& rsXmlFile, CALLER* pCaller, void (CALLER::*pfStartTag)(CXmlTag* pTag), void (CALLER::*pfEndTag)(CXmlTag* pTag) ){..... CXmlTag* pXmlTag = new CXmlTag();..... //START OF XML-TAG if( pCaller && pfStartTag ) (pCaller->*pfStartTag)(pXmlTag);..... //END OF XML-TAG if( pCaller && pfEndTag ) (pCaller->*pfEndTag)(pXmlTag);.....}//ExternalCallerclass CExternalCaller{public : void GetData() { .... //READ DATA FROM XML CXmlParser xmlParser; xmlParser.ParseXml("<xml-file-path>", this, &CExternalCaller::StartTag, &CExternalCaller::EndTag); .... }private : void StartTag(CXmlTag* pTag) {} void EndTag(CXmlTag* pTag) {}}