Opened 4 years ago
Last modified 4 years ago
#1046 assigned ожидаются исправления
WW #18
Reported by: | Brilliantov Kirill | Owned by: | Brilliantov Kirill |
---|---|---|---|
Component: | WW_format | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (8)
comment:1 Changed 4 years ago by
Owner: | changed from Egor Suvorov to Brilliantov Kirill |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from Brilliantov Kirill to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Корректность 4/7:
- В
FormatHelper
для вектора лишние перевыделения памяти в конструкторе. Много перевыделений. - Неверная оценка размера для пустых векторов прямо на smoke-тесте. Ваше счастье, что тут UB не случилось (как минимум из-за переполнения). В следующем ответе поясните, пожалуйста, в чём была проблема.
Стиль 1.25/3:
std::accumulate
у вас вызывается дляT=int
, а неsize_t
.- Не хватает слов
final
Detecter
-->Detector
// BOOL Specialization
— комментарий, имхо, бесполезный, полностью дублирует следующие две строки и ничего не добавляет к коду. Заодно появляется возможность поправить код и не поправить комментарий, что плохо. Аналогично с остальными комментариями про специализации.- Неаккуратные оценки на длину була. Посмотрите, как этот
estimate_size
используется. - Неясно, откуда взялась константа
2
в специализации для целых чисел. Нужно пояснение-комментарий в коде — вот тут комментарий реально по делу. - Непонятен комментарий
formatted += '{' ?
max_chars_count
иis_formattable
большими буквами, пожалуйста — это коснтанты.- Вместо
buffer, buffer + some_constant_which_is_hopefully_synchronized_with_the_line_above
лучшеstd::begin()
,std::end()
из<iterator>
. Тогда не надо будет глазами проверять, что корректно указан размер буфера в двух строчках.
comment:4 Changed 4 years ago by
Owner: | changed from Egor Suvorov to Brilliantov Kirill |
---|
comment:5 Changed 4 years ago by
Owner: | changed from Brilliantov Kirill to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
comment:6 Changed 4 years ago by
Owner: | changed from Egor Suvorov to Brilliantov Kirill |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Не компилируется:
In file included from tests/01_smoke_test.cpp:1: ../../../cpp19/brilliantov.kirill/lab_18/include/format.hpp:98:26: error: use of undeclared identifier 'data'; did you mean 'std::data'? return 2 /* {} */ + (data.empty() ? 0 : 2 * (data.size() - 1)) /*delims*/ + elements_eval; ^~~~ std::data /usr/lib/llvm-10/bin/../include/c++/v1/iterator:1982:6: note: 'std::data' declared here auto data(_Cont& __c) ^ In file included from tests/01_smoke_test.cpp:1: ../../../cpp19/brilliantov.kirill/lab_18/include/format.hpp:98:26: error: reference to overloaded function could not be resolved; did you mean to call it? return 2 /* {} */ + (data.empty() ? 0 : 2 * (data.size() - 1)) /*delims*/ + elements_eval; ^~~~ /usr/lib/llvm-10/bin/../include/c++/v1/iterator:1982:6: note: possible target for call auto data(_Cont& __c) ^ 2 errors generated.
comment:7 Changed 4 years ago by
Owner: | changed from Brilliantov Kirill to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:8 Changed 4 years ago by
Owner: | changed from Egor Suvorov to Brilliantov Kirill |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность 7/7.
Стиль 2.5/3:
MAX_CHARS_COUNT
вformat.hpp
неверно аргументирован.to_chars
не выводит null-terminated string.0ULL
— лучшеstatic_cast<std::size_t>
Note: See
TracTickets for help on using
tickets.
Корректность 2/7:
Стиль 0.5/3:
true_str
/false_str
/esimated_size
лесом.to_chars
завершился успешно.formattable
не нужны аргументы....
возникают только там, где надо сделать перегрузку с минимальным весом — у вас тут вообще хватит константы.FormatHelper<typename, bool>
очень плохо расширяется. Например, если попросить добавить вас ещё один вид методаformat()
, то придётся костылить и усложнять одну из двух специализаций.FormatHelper<T, false> // For types with format method
. А проверка наличия этого метода спрятана глубоко в методformattable
.FormatHelper
создаётся дважды.push_back
, особенно с,
вместо;
(это прям вообще очень плохо выглядит). Лучше+=
, да.esimated_size
для.format()
не соответствует своему названию.