CRTP должен умереть? АйТир Лист идиом и фичей C++: от худших к лучшим

C++ — язык с долгой памятью. В нём до сих пор живут идиомы и приёмы, которые когда-то спасали разработчиков, а сегодня нередко мешают писать безопасный, быстрый и поддерживаемый код. Мы продолжаем использовать макросы, CRTP или iostream «по привычке», не всегда задумываясь о цене — сложности поддержки, скрытых багах, просадках производительности и времени команды. Разобраться, что в современном C++ действительно стоит брать в прод, а что пора оставить в прошлом, — важная задача для инженера, который не хочет тащить legacy в 2026 год. Привет, Хабр! Недавно мы запустили шоу «АйТир Лист». В каждом выпуске берём одну тему из мира разработки и раскладываем её по тир-листу — от FAIL до GOD. В первом выпуске разбирали open source для фронтенда , а во втором выпуске — обсудим непростую тему фич и идиом С++. Приглашённые эксперты — Антон Полухин, эксперт-разработчик C++ платформы городских сервисов Яндекса, и Даниил Черепанов, архитектор редакторов МойОфис. Будет субъективно, местами провокационно и точно полезно — чтобы вы посмотрели на привычные инструменты свежим взглядом и осознанно выбирали, на чём писать следующий проект.

https://habr.com/ru/companies/ncloudtech/articles/982972/

#c++ #мойофис #crtp #namespaces #лямбды #raii #исключения #variadic_templates #модули #pimpl

CRTP должен умереть? АйТир Лист идиом и фичей C++: от худших к лучшим

C++ — язык с долгой памятью. В нём до сих пор живут идиомы и приёмы, которые когда-то спасали разработчиков, а сегодня нередко мешают писать безопасный, быстрый и поддерживаемый код. Мы продолжаем...

Хабр

Chàng trai 19 tuổi đam mê thiết kế game engine, đặc biệt là ECS. Anh ấy đang thử nghiệm SFINAE, template metaprogramming, variadic programming, CRTP/SRTP và kiến trúc engine. Rất mong nhận được phản hồi và thảo luận về code!
#gameengine #ECS #SFINAE #CRTP #gamedevelopment #lậptrìnhgame #phattriengame #congnghe

https://www.reddit.com/r/programming/comments/1pbw6d8/19yearold_dev_diving_into_ecs_sfinae_crtp/

Chàng trai 19 tuổi chia sẻ về hành trình khám phá ECS, SFINAE và CRTP trong thiết kế game engine. Dự án GitHub của anh tập trung vào metaprogramming, variadic programming, static polymorphism và kiến trúc ECS. Anh mong muốn nhận được feedback và thảo luận về code/design.
#laptrinh #gameengine #ECS #SFINAE #CRTP #programming #vietdev

https://www.reddit.com/r/programming/comments/1pbw6d8/19yearold_dev_diving_into_ecs_sfinae_crtp/

Sponsor Shout-out!
It is our pleasure to announce our long term supporter, Altered Security as a Gold sponsor for Adversary Village at @defcon 33!
Thank you, @alteredsecurity and Nikhil Mittal for the continuous support towards Adversary Village!
Learn more about Altered Security and training programs here: https://www.alteredsecurity.com/
Adversary Village at DEFCON33 Schedule: https://adversaryvillage.org/adversary-events/DEFCON-33/
#DEFCON33 #AdversaryVillage
#AlteredSecurity #CRTP #AdversarySimulation #OffensiveSecurity

Ошибки, которые не случились: C++ и compile‑time проверка SQL-запросов

В этой статье мы посмотрим, как можно реализовать полную compile‑time валидацию SQL‑запросов на основе схемы базы данных, встраиваемой прямо в код. Без магии, без рантайма, без сторонних тулов. Только стандартный C++ и ваша структура БД. Валидация таблиц, столбцов, типов аргументов и их количества — всё на compile‑time. Представьте, если бы компилятор сам указывал «такой таблицы нет», «несуществующий столбец», «несовместимые типы» — до запуска программы. Такой подход полностью устраняет «сюрпризы» во время исполнения и исключает класс ошибок, связанных с генерацией SQL во время работы программы. Ваша программа даже не соберётся.

https://habr.com/ru/articles/929052/

#constexpr #compiletime #C++ #SQLвалидация #consteval #ошибки_компиляции #C++26_возможности #ZeroRuntime #typesafe_SQL #CRTP

Ошибки, которые не случились: C++ и compile‑time проверка SQL-запросов

Предыстория Ключевые слова constexpr / consteval в С++ живут уже не первый год, но для многих по‑прежнему остаются чем‑то неяснымиили чересчур академичными. По старой...

Хабр
Happy #weekwithoutdriving ! I look forward to hearing about experiences. Take the pledge at the national website, or look for a local org participating in the event. For #humboldtca sign up with #CRTP at transportationpriorities.org

У C++20 зʼявились концепти й обмеження для функцій, класів/структур та інших шаблонів. Для функцій та методів вимоги можна вказувати після оголошення шаблону або після функції.

template<typename T> requires ... T f() {} template<typename T> T f() requires ... {}

Якщо не шаблонний метод у шаблоні класу потребує додаткових вимог їх можна вказати після оголошення методу.

template<typename T> class S { T f() requires integer<T> {} };

У такому випадку клас може згенеруватись з будь-яким типом, але це метод буде присутній тільки якщо шаблонний тип відповідає вимогам.

Але іноді може знадобитись використати поточний клас у вимогах. Наприклад при CRTP.

template<typename D> class Base requires std::derived_from<D, Base> {...};

На жаль зараз такого немає.

#cpp #cxx #cpp20 #concepts #constrains #requires #class #template #struct #CRTP #proposal #програмування #шаблони #вимоги #обмеження #пропозиція

Social.Net.Ua

У C++ 23 додали можливість явно вказати обʼєкт класу над яким виконується метод в параметрах не статичних і невіртуальних методів.

struct X { void foo(this X const& self, int i); // same as void foo(int i) const &; // void foo(int i) const &; // Error: already declared void bar(this X self, int i); // pass object by value: makes a copy of “*this” };

За допомоги цієї функціональності можна оновити використання CRTP.

// a CRTP trait struct add_postfix_increment { template<typename Self> auto operator++(this Self&& self, int) { auto tmp = self; // Self deduces to "some_type" ++self; return tmp; } }; struct some_type : add_postfix_increment { some_type& operator++() { ... } };

Більше почитати про це можна тут:

#cpp #cpp23 #explicit_this #crtp #this #self #template #шаблони #нововведення

Function declaration - cppreference.com

CRTP в C++

Привет, Хабр! CRTP — это метод в C++, при котором класс наследуется от шаблона класса, используя себя в качестве параметра шаблона. Это выглядит примерно так: класс X наследуется от класса-шаблона Y<X> . Этот паттерн позволяет базовому классу напрямую обращаться к методам производного класса. С помощью CRTP можно можно обогатить интерфейс производного класса, внеся в него дополнительные методы через базовый класс-шаблон. С CRTP также можно достигнуть полиморфизма во время компиляции и таким образом избваиться от затрат на производительность, связанных с динамическим полиморфизмом и виртуальными функциями.

https://habr.com/ru/companies/otus/articles/803601/

#c++ #otus #crtp

CRTP в C++

Привет, Хабр! CRTP — это метод в C++, при котором класс наследуется от шаблона класса, используя себя в качестве параметра шаблона. Это выглядит примерно так: класс X наследуется от класса-шаблона...

Хабр

Part 1: 5 days into #weekwithoutdriving and I've barely posted about it. Its been a crazy week. Catching up on my reflections.

Tuesday: I decided to walk to work. I'm lucky that I'm very close to work. It was a 30 minute walk along very busy city streets. Loud, exhaust, ducking over grown bushes, multiple houseless camps. But also feels good to walk, say hi to people, see parts of the city that are obscured by driving. Felt refreshed, a bit sweaty but all good.

Took the bus back home. Eureka #transit runs one-way loops which are really frustrating. It would take me at least an hour to get to work on the bus, but the ride back took 10 minutes, and that was long because of traffic. Its been a while since I commuted on the bus. I miss it.

#visionzero #CRTP #humboldtcounty #humboldtca