суббота, 9 сентября 2023 г.

[prog.c++.idiotic] Позволю себе еще раз пнуть deducing this, который вводят в C++23

В C++23 давно добавили такую фичу, как deducing this. К которой лично я отношусь очень негативно. Как по мне, так с deducing this язык C++23 еще больше повышает планку требований к разработчикам. И сейчас С++ на должном уровне освоить могут не только лишь все, а уж хорошее знание и умение вменяемо использовать C++23 будет доступно, полагаю, только надмозгам.

На тему deducing this я уже несколько раз в разных соцсетях негативно высказывался. Более того, когда-то в Habr-е в комментариях даже набросал пример того, как часть задач deducing this можно было бы решить и "в традиционном" C++ном синтаксисе, не превращая C++ в подобие Python-а и Rust-а с явной передачей self-а в нестатические методы:

class params {
  int limit_;
  ...
public:
  // Иммутабельный геттер.
  [[nodiscard]] int limit() const &, const && noexcept {
    return limit_;
  }
  // Мутабельный сеттер. Может использоваться если params
  // применяется в стиле builder pattern.
  decltype(*this) limit(int v) &, && {
    if(v < -10 || v > 40throw std::invalid_argument{...};
    limit_ = v;
    return *this;
  }
};

А вот давеча прочитал статью от Сандора Дарго "C++23: some changes related to templates" и узнал, что к deducing this еще и новый std::forward_like прилагается. Мало нам было std::forward и std::move, теперь еще и std::forward_like в придачу :(

PS. Не могу не поделится еще на одну статью с примером применения deducing this: "User-defined class qualifiers in C++23". Отличный пример того как упороться новой фичей и еще один способ превратить код в головоломку.

Комментариев нет: