Entry tags:
[ненависти псто] Всё больше убеждаюсь, что libconfig - не лучший выбор
И полное отсутствие пакетов, которые зависят от этой библиотеки на моей системе - это только подтверждает.
Речь про https://github.com/hyperrealm/libconfig
Не скажу, что это был мой выбор.
Но очень быстро я нашёл, в чём разочароваться.
Сначала меня удивило, что старый добрый what() у исключений возвращает не конкретное сообщение об ошибке (хотя не так уж и сложно составить детальное описание проблемы в этом месте), а имя класса исключения, например:
Думал предложить пулл-реквест, сделал себе копию проекта, а там - новая засада с временными файлами, непонятно, зачем их хранить в системе контроля версий, я ещё понимаю раздавать в бандле для релизов. Короче, бросил эту идею. Хотя, изменения ортогональны этим, но как-то руки уже опустились.
А сегодня я напоролся на проблему, которая у них идёт - [та-да-а-а-а-а!] - за номером раз!
Имеем на интерфейсе класса Setting среди прочего такие операторы приведения:
Почему другие должны страдать, кто не пользуется другими библиотеками, зачем ограничивать в интуитивно понятной выразительности людей на плюсах?!
Речь про https://github.com/hyperrealm/libconfig
Не скажу, что это был мой выбор.
Но очень быстро я нашёл, в чём разочароваться.
Сначала меня удивило, что старый добрый what() у исключений возвращает не конкретное сообщение об ошибке (хотя не так уж и сложно составить детальное описание проблемы в этом месте), а имя класса исключения, например:
Вообще, если исключения включены, то я класс - и так могу через RTTI узнать. Непонятно, зачем это вообще, ведь нужно возвращать осмысленное сообщение, вся информация в полях для этого есть. Больше похоже на остатки от прототипа или заглушкам к первой версии.const char *ParseException::what() const throw() { return("ParseException"); }
Думал предложить пулл-реквест, сделал себе копию проекта, а там - новая засада с временными файлами, непонятно, зачем их хранить в системе контроля версий, я ещё понимаю раздавать в бандле для релизов. Короче, бросил эту идею. Хотя, изменения ортогональны этим, но как-то руки уже опустились.
А сегодня я напоролся на проблему, которая у них идёт - [та-да-а-а-а-а!] - за номером раз!
Имеем на интерфейсе класса Setting среди прочего такие операторы приведения:
На что автор библиотеки отвечает:operator const char *() const; operator std::string() const;
hyperrealm commented on Mar 10, 2014По-моему, если уж тебе в другую библиотеку без потерь нужно передать что-то - так и адаптируй для той библиотеки этот случай с помощью отдельного оператора, на публичном интерфейсе - сделай возможность (скажем, метод
The const char* casts are very useful actually, when you are using libconfig with a framework that has its own string class (e.g., Qt or my libcommonc++). If you remove these then every conversion will have to go through std::string first, which is wasteful as it involves heap allocation and memory copying.
I would rather get rid of the std::string assignment and cast operators, if this doesn't break existing code that uses them.
c_str()
) и вперёд!Почему другие должны страдать, кто не пользуется другими библиотеками, зачем ограничивать в интуитивно понятной выразительности людей на плюсах?!
Re: Ðавно Ñже поÑа вÑем Ð´Ð»Ñ app development
1. Ðли они Ñами из ÑÐµÐ±Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑедÑÑавлÑÑÑ ÑоÑÐºÑ Ð´Ð¾ÑÑÑпа?
Ðни пÑÑмо как WiFi router ÑÐµÐ±Ñ Ð²ÐµÐ´ÑÑ. Ðе ÑвеÑен на ÑÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÑиÑленнÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑений.
2. Ðли Ñам - ad-hoc Ñоединение и они Ñами Ñебе паÑамеÑÑÑ ÑÑÑанавливаÑÑ Ð¸Ð· пÑоÑивки?
ЧеÑез REST вÑÑÑавлÑÑÑÑÑ Ð²Ñе паÑамеÑÑÑ ÐºÐ°Ð¼ÐµÑÑ.
3. Ðока на API - болÑÑе запÑÑÑваеÑ: ÑÑо знаÑÐ¸Ñ "WiFi паÑолÑ", когда он обÑÑÑнÑеÑÑÑ Ð² конÑекÑÑе HTTP-запÑоÑа? ЧÑÐ¾Ð±Ñ ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ ÑделаÑÑ, надо ÑÑÐ¾Ð±Ñ Ñже бÑл IP ÑÑовенÑ, Ñ.е. WiFi Ñже наÑÑÑоен.
Ðменно как Ñ WiFi ÑаÑÑеÑа паÑолÑ. РзапÑоÑе никакой аÑÑенÑикаÑии, пÑоÑÑо ÑекÑÑ Ð¿Ð¾ http get.
ÐÑ Ð´Ð°, ÑÑ Ð¾ÑкÑÑл ÑÑÑаниÑÐºÑ Ð¿Ñо оÑобÑÑ ÐºÐ°Ð¼ÐµÑÑ Hero4 Pro Session. Ðна "ÑÑпаÑ", ÐµÑ Ð½Ð°Ð´Ð¾ акÑиÑоваÑÑ Ð² Ñежим ÑазговоÑа Ñ Ð¿Ñиложением APP. Ðак подклÑÑилÑÑ Ðº WiFi еÑ, Ñак надо ей поÑлаÑÑ Wake On LAN Ð¿Ð°ÐºÐµÑ Ð¿Ð¾ UDP ей. ÐолÑÑе никакой оÑобенноÑÑи Ñ Session. ÐоÑом Ñаз в 2.5 ÑекÑÐ½Ð´Ñ Ð²Ñе камеÑÑ Ñ Ð¾ÑÑÑ Keep Alive Ð¿Ð°ÐºÐµÑ Ð¿Ð¾ ÑÐ¾Ð¼Ñ Ð¶Ðµ ÑÐ°Ð¼Ð¾Ð¼Ñ UDP.
Re: Ðавно Ñже поÑа вÑем Ð´Ð»Ñ app development
Ð Ð²Ð¾Ñ Ñак Ð²Ð¾Ñ Ñебе кÑпиÑÑ Ð¿Ð¾Ð¸Ð³ÑаÑÑÑÑ - ÑÑÑÑки какие-Ñо доÑоговаÑÑе... ÐпÑоÑем, поÑÑÐ¾Ð¼Ñ Ñ Ð¼ÐµÐ½Ñ Ð¸ Ð½ÐµÑ ÑблоÑнÑÑ Ð¶ÐµÐ»ÐµÐ·Ð¾Ðº, а даÑиÑÑ - как-Ñо никÑо не даÑиÑ.
Re: Ðавно Ñже поÑа вÑем Ð´Ð»Ñ app development