Re[2]: Библиотека форматирования marty::format
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 15.04.25 19:50
Оценка:
Здравствуйте, Igore, Вы писали:

I>Посмотрел код а не саму идею, замечания:


I>defs.h

I>MARTY_ARG_USED — не используется в примерах, и похоже в проекте не использует, а без этого макроса сам файл не нужен

Используется — https://github.com/al-martyn1/marty_format/blob/3cb1dbc86c158a67302f483b9ec06abc0abe5350/marty_format.h#L1202
Пока в затычках, потом, вероятно, будет не нужен.


I>dummy.cpp — удалить

Хз, возможно, но "опакечивание" при помощи CMake хочет хоть какие-то сорцы. Возможно, я не умею его правильно готовить


I>enums.h — не соберется, где вся директория marty_cpp


Тут не очень понятно, можно поподробнее?

Это генерируемый файл, подробности тут — https://github.com/al-martyn1/marty_format/tree/main/_generators
Генератор тут — https://github.com/al-martyn1/umba-enum-gen


I>и сразу по виду использования, а макрос MARTY_CPP_ENUM_FLAGS_DESERIALIZE_ITEM точно нужен? Это не аналог

I>
I>static inline std::map<FormattingFlags, std::string> = {
I>   {FormattingFlags::unknow,  "unknown"},
I>// ...
I>};
I>


MARTY_CPP_ENUM_FLAGS_DESERIALIZE_ITEM — это https://github.com/al-martyn1/marty_cpp/blob/e700f292fb17b41b31a25bdee4e8a56e3a40b7ee/marty_flags.h#L62
а
MARTY_CPP_ENUM_DESERIALIZE_ITEM — это https://github.com/al-martyn1/marty_cpp/blob/e700f292fb17b41b31a25bdee4e8a56e3a40b7ee/marty_enum.h#L217
#define MARTY_CPP_ENUM_DESERIALIZE_ITEM( val, valStr )                       \
        _m[lowerCaseConvert ? marty_cpp::toLower(std::string(valStr)) : std::string(valStr)] = val



I>exceptions.h

I>MARTY_FORMAT_DECLARE_EXCEPTION_CLASS — непонятно для чего нужен, но ладно, внутри одного using clsBase::clsBase для наследования всех конструкторов разве не достаточно будет?
I>В class base_error тоже самое, ну или хотя бы default используй.
I>
I>base_error(const base_error &e) = default;
I>base_error& operator=(const base_error& e) = default;
I>

I>Похоже была мысль что есть иерархия исключений с разным m_offset, но по виду везде одинаковый и поле не используется.

Разные типы исключений, типы исключений объявляются одной строчкой макросом, кидаются в разных ситуация.

m_offset — смещение в форматной строке, вызвавшее ошибку. Не везде заполняется и не везде используется, многое ещё на говне, потом, возможно, порефакторю иерархию исключений, и там, где m_offset не нужен — его не будет


I>marty_format.h

I>
I>if ((formattingFlags&FormattingFlags::ignoreFillIndirectErrors)==0)
I>

I> не читается без пробелов вокруг &

Вкусовщина, но принял к сведению


I>Сама идея странная, зачем имея флаг ignoreFormattingErrors всегда кидать исключения, потом ловить, потом перепрокидывать, не проще исключение просто не кидать?


А как? Возвращать std::optional?


I>utils.h

I>Для примера isFormatTypeChar, а почему не через switch/case, и читать и поддерживать, проще же.

Так там сборная солянка из разных is*.

Если я поменяю реализацию isFormatFormatThousandSep, мне что, искать все места, где я задаю символы разделителя разрядов?


I>removePrefix, removeSuffix, если срабатывает граничное условие, то зачем действие делать, можно сразу пустую строку вернуть


Хз, вероятно, писал, не приходя в сознание, и сделал, как показалось проще. Будто ты говнокода не писал

I>
I>    if (n>str.size())
I>        return "";
I>



Спасибо за разбор и критику моего говнокода
Маньяк Робокряк колесит по городу
Отредактировано 15.04.2025 19:52 Marty . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.