Українська
Відкрити в Telegram

Пост Думав написати про це ще минулої середи, але ви мені тоді точно не повірили би 😄

9 квітня 2026
С
Сіпласпластик
Думав написати про це ще минулої середи, але ви мені тоді точно не повірили би 😄 Отже, в C++ тепер є новий різновид циклів — template for 🙂 Хочемо, ми, наприклад, написати функцію зі змінною кількістю аргументів, яка виводитиме значення в консоль: template <typename... Ts> void print_all(Ts... elems); print_all("foo", 42, 'p', 3.14); // використання Раніше довелось би писати щось отаке: template <typename... Ts> void print_all(Ts... elems) { (std::println("{}", elems), ...); } Ніби й зрозуміло, що elems розпаковуються в пачку виразів, кожний з яких — це println, але читається не дуже. Тому знавці використовували би, мабуть, 🐝 Boost.Hana. А в C++11 взагалі колись писали отак: void print_all() {} template <typename T, typename... Ts> void print_all(T first, Ts... rest) { std::cout << first << std::endl; print_all(rest...); } Тобто типовий ФП-підхід, де список ділиться на head:[tail] й обходиться рекурсивно, доки не дійде до порожнього. А тепер можна буде писати отак: template <typename... Ts> void print_all(Ts... elems) { template for (auto elem : {elems...}) { std::println("{}", elem); } } Усе це розгортається під час компіляції в щось на кшталт: template <typename... Ts> void print_all(Ts... elems) { { { auto elem = elems...[0]; // така індексація, // до речі, також // нова фіча std::println("{}", elem); } { auto elem = elems...[1]; std::println("{}", elem); } { auto elem = elems...[2]; std::println("{}", elem); } } } Працює template for не лише з пачками типів, але й з будь-чим. Наприклад, звичайними масивами. Так void f() { template for (constexpr int I : std::array{1, 2, 3}) { static_assert(I < 4); } } перетворюється на void f() { { constexpr auto&& __range = std::array{1, 2, 3}; constexpr auto __begin = __range.begin(); constexpr auto __expansion_size = __range.end() - __begin; // 3 { constexpr int I = *(__begin + 0); static_assert(I < 4); } { constexpr int I = *(__begin + 1); static_assert(I < 4); } { constexpr int I = *(__begin + 2); static_assert(I < 4); } } } Ну й ще багато чого можна робити звісно. Проте найкраще ця штука себе показує з новою рефлексією, про котру ще згодом напишу.
3 · 885 ·

Поруч у стрічці

ССіпласпластикТам позавчора нарешті затвердили новий стандарт C++26, тож усіх вітаю. Тепер звісно доведеться почекати ще років 3–5–7, доки його імплементують у компіляторах, ССіпласпластикПерезавантажив увечері комп, що я роблю вкрай рідко, запускаю зранку бекенд через Docker Compose… а останній висить і ніц не робить! Взагалі. Я вже і кеші почис
це повідомлення
ССіпласпластикПамʼятаєте, я колись розповідав, що Pebble воскрес? Так ось вони там конкурс програм запустили, і я нашвидку (за 16 годин плюс-мінус ще стільки ж) накарлякав прССіпласпластикТупий телеграм десь загубив мою превʼюшку посилання, і я не зміг її повернути )
ССіпласпластикСіпласпластик@cpplastic · канал · Технології
817підписників433середнє охоплення поста
Стрічка майданчика Відкрити в Telegram

Відкрита публічна стрічка з пошукового індексу ChatCrawler — «Google по публічному Telegram»; оновлюється в міру обходу майданчика. Час — UTC.

Лише публічний контент, офіційний API Telegram. Про проєкт · Питання · Межі індексу · Прибрати сторінку з видачі · Каталог · Пошук · Як ми рахуємо