Здравствуйте, 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>
Спасибо за разбор и критику моего говнокода