Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#981 closed ожидаются исправления (задача сдана)

WW #15

Reported by: Карнаухов Кирилл Owned by: Egor Suvorov
Component: WW_linq Version: 1.0
Keywords: Cc:

Description


Change History (4)

comment:1 Changed 4 years ago by Egor Suvorov

Resolution: задача сдана
Status: assignedclosed

Корректность 6/7: на пустом входе падает until_enumerator.

Стиль 2/3:

  • Лучше операторы вызывать от *this, читать проще (привычнее) и симметричнее с остальным кодом:
    • ((operator bool())) — лучше while (*this)
    • operator*() — лучше **this
    • operator++() — лучше ++*this
  • operator bool() должен быть explicit.
  • У enumerator стоит запретить присваивание и копирование. И начиная с C++17 можно даже перемещение запретить из-за copy elision.
  • В where есть дублирование кода между методами.
  • Довольно странно, что select_enumerator требуется каждый раз перевычислять элемент.
    • И в std::move(static_cast<T>(....)) точно не нужен move (ну, если T не ссылка сам по себе).
  • Ваш инвариант реализации "operator++ всегда можно вызывать, иногда это no-op" стоит явно задокументировать. Аналогично с инвариантом operator bool() noexcept.

comment:2 Changed 4 years ago by Egor Suvorov

P.S. Проверялась версия 4394 или более ранняя.

comment:3 Changed 4 years ago by Egor Suvorov

Type: ожидается проверкаожидаются исправления

P.S. Следует все вспомогательные методы сделать rvalue-ref-qualified.

comment:4 Changed 4 years ago by Egor Suvorov

P.P.P.S. А ещё не хватает виртуального деструктора у enumerator(). Он формально здесь не требуется, но лучше добавить — класс-то уже полиморфный.

Note: See TracTickets for help on using tickets.