XMLを解析し、ヘルパーを作成する必要があります。私はC++の専門家ではありませんが、実際には7年以上前にcで書いています。だから、私は確認したいと思います、アプローチ、私が使用するものが正しいかどうか:)
1)例外を処理するために、いくつかの単純なヘルパーを実装しました。例えば:
CComPtr<IXMLDOMElement> create_element(CComPtr<IXMLDOMDocument> xml_doc, string element_name) {
CComPtr<IXMLDOMElement> element;
HRESULT hr = xml_doc->createElement((BSTR)element_name.c_str(), &element);
if (FAILED(hr))
hr_raise("Failed to create XML element '" + element_name + "'", hr);
return element;
}
次のように使用します。
void SomeClass::SomeMethod() {
CComPtr<IXMLDOMElement> element = xmlh::create_element(xml_doc, "test");
//..
// save xml to file
}
大丈夫ですか?関数の結果としてスマートポインタを返すことはできますか?このアプローチにはリークがありませんか?
2)また、クラスメンバーとしていくつかのスマートポインターを使用します。このような:
class XMLCommand {
public:
XMLCommand(std::string str_xml);
~XMLCommand(void);
protected:
CComPtr<IXMLDOMDocument> xml_doc;
}
XMLCommand::XMLCommand(string str_xml) {
xml_doc = xmlh::create_xml_doc();
}
// some methods below uses xml_doc
質問は同じです、それは正しく、漏れがありませんか?
ありがとう。