написал простенький парсер. разбирает только xml структуры, комменты и т. д. сорцы в аттаче. прошу высказать замечания.
#define XML_SYMBOL_LT (t_base_char)'<' Дефайны не подчиняются пространствам имен и ограничению доступа. XML_SYMBOL_LT и сотоварищи будут доступны снаружи, но компилиться это естественно не будет. Используй вместо этого статические константы. typedef enum ParsePrologStatus Ты уж определись, на чем ты пишешь, на C или на C++. Если на C++, то typedef не надо.
и в каждом конструкторе инициализировать? х.з. сколько пишу - всегда с typedef'ом, да и на работе проект - там тож везде typedef'ы. даже и не знал что он в С++ не пишется.
maksim_ Статические константы не нужно иницилизировать в каждом конструкторе. Более того, целочисленные статические константы можно инициплизировать прямо в классе. class blabla { public: static int const val = 10; }; Си-стайл: typedef enum _tag_foo { blabla; } foo; Сипипи-стайл: enum foo { blabla; }; Тоже самое касается и структур.
так он и так юникодовый - реализован в виде шаблона. можно и utf-32 заюзать, если нужно. пока что utf-8, utf-16. Код (Text): template <typename t_base_char> class CXmlParserT ещё, забыл упомянуть, собирается 64х версия.
Когда ты параметризуешь std::basic_string типом символа - ты лезишь в дебри библиотеки? Не знаю, сделано ли это у ТС, но с точки зрения языка никаких преград не вижу.
не думаю, что юзать несколько бызовых кодировок для парсера одновременно - оптимальное решение. многие апликухи юзают, скажем, только utf-8 - зачем тогда обременять парсер лишними проверками? с точки зрения размера кода будет выигрыш, по сравнению с шаблонами, но производительность упадёт сильно. чтобы создать класс парсер с базовым типом utf-8 нужно всего лишь Код (Text): CXmlParserT<t_uchar> parser(&handler); аналогично utf-16 Код (Text): CXmlParserT<t_wchar> parser(&handler); никаких сложностей в использовании не вижу.
_DEN_ Покажи, где я это утверждал. t_wchar это ещё не юникод. Во первых кодировки разные бывают. Во вторых, что будет если у нас не юникод проект, а нам надо отпарсить юникод?
Booster Кодировки (windows-1251, koi-8, и т.д.) бывают только в ANSI. В UTF кодировок нет. Вопрос из разряда "что будет если у нас аудиоплеер, а нам надо посмотреть видео".
_DEN_ Блин, есть UTF8, UTF16, c фиксированным размером 2 байта и т.д. Хорош умничать. Насчёт не юникод проекта. Насколько понимаю там хардкорно служебные символы зашиты, хотя с UTF8 это прокатит.
Booster Все равно не понимаю в чем сложность. У шаблонного класса есть параметр. На его основе можно сделать type traits, function traits и любые другие traits, из которых будет компоноваться функциональность парсера. Какие проблемы? Если тип символов задается ключем, то думаю все ясно как и что сделать. Если же нужно автоматом из потока угадывать его тип символов, то лучше сделать статический парсер плюс поверх него динамическую угадывалку, поскольку вместе это функциональность может понадобиться далеко не всем.
_DEN_ У меня проблем нет, я интересуюсь есть поддержка этого или нет. Автоматическая угадывалка меня не интересует.