C++ Expat и синтаксический анализ XML

Я новичок в использовании expat. Я пытаюсь понять, как должен работать XML_SetUserData. В моем случае у меня есть список объектов класса A, и мне нужно заполнить этот список, когда я анализирую поток XML.

До сих пор я планировал использовать синглтон для представления этого единственного списка. XML_SetUserData устраняет необходимость в том, чтобы мой список был одноэлементным?


person reza    schedule 30.08.2011    source источник


Ответы (1)


Да, это так. Просто передайте XML_SetUserData указатель на любую структуру или класс, содержащий необходимое состояние, и верните его обратно из (void*) внутри вашего обработчика.

Полезным приемом является определение базового класса со статическими функциями-членами обратного вызова, которые перенаправляют вызовы от expat в виртуальные функции-члены. В этом сценарии XML_SetUserData предоставляет удобный механизм для передачи указателя this в статические обратные вызовы.

person Marcelo Cantos    schedule 30.08.2011
comment
какое-либо преимущество, кроме устранения глобального? Мне все еще нужно отслеживать, какой элемент анализируется в моей структуре данных, глобальный или нет, оба. Верный? - person reza; 30.08.2011
comment
@reza: Да, вы должны отслеживать все сами. Я добавил общий сценарий использования, который подчеркивает одно дополнительное преимущество (хотя избегание глобальных переменных является основным мотивом для передачи пользовательских данных через API таким образом). - person Marcelo Cantos; 30.08.2011