Comments 43
Помог. буст — вообще очень интересная тема
0
Да, в бусте очень много «вкусностей».
0
Может Вы начнете писать и о других возможностях Boost? А то статей по этой библиотеке на русском очень мало, а на Хабре — так и вообще не сыскать.
+3
Хорошо. Я уже думал об этом. А о чём бы вам хотелось услышать?
+2
По просторам рунета гуляет единственная книга на русском про Boost (а вернее про Boost Graph Library). Поэтому о библиотеке графов, думаю, писать не нужно.
А вот о тех фичах, которые войдут в новый стандарт С++, очень хотелось бы услышать. Я не силен в Boost, но слышал, что там есть несколько видов смарт-поинтеров, очень удобные биндеры и т.д. и т.п.
Возможно, логичнее всего будет писать о тех вещах, которые наиболее применимы в повседневном программировании, если таковые там есть.
А вот о тех фичах, которые войдут в новый стандарт С++, очень хотелось бы услышать. Я не силен в Boost, но слышал, что там есть несколько видов смарт-поинтеров, очень удобные биндеры и т.д. и т.п.
Возможно, логичнее всего будет писать о тех вещах, которые наиболее применимы в повседневном программировании, если таковые там есть.
+2
Уboost наредкость толковый мануал, 99% того что мне было нужно я находил именно там. Вообще штука просто супер, даже не знаю как без неё можно прогать. И что самое главное, постоянно выходят новые версии, с новыми возможностями!
+1
Спасибо, полезно и практично.
+1
Спасибо. Радует, что на Хабре не только веб-дев.
+6
А зачем два одинаковых ( habrahabr.ru/blogs/Haskell/50337/ ) поста, отличающихся только языком программирования?
0
немного не в тему, но если нет времени писать своё средство, есть хорошая готовая библиотека sourceforge.net/projects/inilib
+1
У неподготовленного читателя может возникнуть ощущение, что для решения задачи на C++ (по сравнению с Hackell) необходимо выполнить значительно большее количество приготовлений, хотя это не совсем так.
Во-первых нет необходимости писать акторы для занесения значений: можно воспользоваться предопределенными спиритом, например push_back_a (с промежуточным сохранением в переменных класса грамматики ссылки на последнюю секцию и Entry). Или можно воспользовавшись boost::phoenix описать эти действия прямо в грамматике в виде лямбда-функций.
А во-вторых, если в качестве контейнера воспользоваться boost::multiindex с композитным ключем, то поиск мы тоже получим out of box. (Правда при этом секции будут храниться при каждом ключе, но для ini файлов это скорее всего несущественно).
Ну и наконец — некоторая критика, относящаяся скорее к постановке задачи. Игнорирование комментариев проще и нагляднее описывать в самой грамматике — это добавит к ней всего пару строчек. Ну и парсить наверное удобнее прямо из файла, благо по крайней мере в спирите для этого есть все средства. Не то чтобы это было очень важно, но в учебной задаче, на мой взгляд, лишние действия маскируют суть.
Во-первых нет необходимости писать акторы для занесения значений: можно воспользоваться предопределенными спиритом, например push_back_a (с промежуточным сохранением в переменных класса грамматики ссылки на последнюю секцию и Entry). Или можно воспользовавшись boost::phoenix описать эти действия прямо в грамматике в виде лямбда-функций.
А во-вторых, если в качестве контейнера воспользоваться boost::multiindex с композитным ключем, то поиск мы тоже получим out of box. (Правда при этом секции будут храниться при каждом ключе, но для ini файлов это скорее всего несущественно).
Ну и наконец — некоторая критика, относящаяся скорее к постановке задачи. Игнорирование комментариев проще и нагляднее описывать в самой грамматике — это добавит к ней всего пару строчек. Ну и парсить наверное удобнее прямо из файла, благо по крайней мере в спирите для этого есть все средства. Не то чтобы это было очень важно, но в учебной задаче, на мой взгляд, лишние действия маскируют суть.
+3
а нафига буст, не я понимаю если он используется во всем остальном проекте, но когда он нигде не используется то лучше обойтись стлом… если кому интересно немного недописанный (руки не доходят никак сделать нормальную шаблонность по значениям, на данный момент значения только строковые) парсер (и писальщик конфигов) на чистом стл, то пишите в личку
-2
Можно и на ассемблерре написать, что уж там :) boost он чтобы не изобретать велосипеды.
0
и только ради каких-то там конфигов подключать доп либы? смысл?
да и потом стл это далеко не ассемблер
да и потом стл это далеко не ассемблер
0
Статья просто показывает как при помощи boost spirit на основе некоторой грамматики написать парсер. Это не обязательно парсер конфигов — ini файлы просто достаточно простой пример.
+1
ну значит я неправильно понял статью;) тогда уж лучше приводить пример на ПЛ/0 каком-нить, который тоже имеет достаточно простой синтаксис, но тем не менее является полной абстракцией от всего и сразу видно что чисто академический пример
0
А вы знаете аналог Boost Spirit на ПЛ/0 (хотя, честно говоря, я слышал только про ПЛ/1)?
Это не чисто академический пример. На его основе этой статьи можно, к примеру, написать парсер для текстовых запросов к своей информационной системе. Или свой DSL. Или ещё что-то.
Да, кстати, пресловутые конфиги таким образом тоже можно парсить (не обязательно ini файлы) =)
Это не чисто академический пример. На его основе этой статьи можно, к примеру, написать парсер для текстовых запросов к своей информационной системе. Или свой DSL. Или ещё что-то.
Да, кстати, пресловутые конфиги таким образом тоже можно парсить (не обязательно ini файлы) =)
0
я имел в виду в качестве грамматики взять язык ПЛ/0, упаси боже на нем что-нибудь писать;)
0
Ну там и грамматика, вероятно, сложнее. И пример намного сильно оторванный от жизни. Вероятно из языков в качестве примера больше бы подошло какое-нибудь подмножество SQL.
0
У меня вопрос ко всей достопочтенной публике. Откуда эта вездесущая боязнь использовать библиотеки для решения пускай даже и маленьких задач? Внесение зависимостей — это плохо? Чем? Боитесь, что сторонние библиотеки изменятся, и что-то перестанет работать? Так если перестало — не используйте новые версии, оставайтесь на старых. Библиотеки для того и существуют, чтобы с меньшими временными затратами решать поставленные задачи, используя совершенно точно лучше протестированные решения, чем собственный велосипед.
0
Спасибо за статью.
Как пример работы с бустом — интересно. Но для решения конкретной задачи конфигов, я бы порекомендовал посмотреть на libconfig (http://www.hyperrealm.com/libconfig/), либа маленькая с хорошими возможностями. Когда писал один проект, мы именно её решили использовать, и не пожалели. Хотя в последствии и перешли на хранение конфига в базе, но для cfg-like конфигов в виде файлов данная либа самое то.
Как пример работы с бустом — интересно. Но для решения конкретной задачи конфигов, я бы порекомендовал посмотреть на libconfig (http://www.hyperrealm.com/libconfig/), либа маленькая с хорошими возможностями. Когда писал один проект, мы именно её решили использовать, и не пожалели. Хотя в последствии и перешли на хранение конфига в базе, но для cfg-like конфигов в виде файлов данная либа самое то.
0
Забавно, что буст используется для каких-то отдельных строковых операций, в то время как полный парсер ini-файла пишется за 10 минут с использованием boost.tokenizer или boost.spirit, если нужно что-то более навороченное.
0
Буст очень разнообразный: есть сложные вещи вроде spirit и bgl, а есть совсем простые вроде optional и scoped_ptr.
0
забавно, что есть boost::program_options
www.boost.org/doc/libs/1_37_0/doc/html/program_options/overview.html#id3457023
www.boost.org/doc/libs/1_37_0/doc/html/program_options/overview.html#id3457023
+1
Sign up to leave a comment.
Создаём парсер для ini-файлов на C++