13626
Изучаем C++. По вопросам сотрудничества: @adv_and_pr
std::piecewise_constructstd::piecewise_construct — это часть стандартной библиотеки C++ и представляет собой структуру, используемую в конструкторах некоторых контейнеров, таких как std::map и std::unordered_map, для конструирования элементов контейнера с использованием разных конструкторов для ключей и значений.
Обычно std::piecewise_construct используется вместе с методами emplace для вставки новых элементов в контейнер. Это позволяет создавать элементы контейнера, используя конструкторы ключей и значений независимо, что может быть полезным, если ключи и значения требуют разных конструкторов.
#для_продвинутых
decltypedecltype — это ключевое слово в C++, которое используется для определения типа выражения или значения. Оно позволяет вам извлекать тип из выражения во время компиляции, что может быть полезно в ряде ситуаций, таких как определение типа переменных, создание алиасов типов и т.д. decltype полезен, когда вы хотите, чтобы тип переменной был автоматически выведен на основе типа выражения, с которым вы работаете.decltype также может быть полезен в более сложных выражениях, включая использование операторов, а также при работе с шаблонами и обобщенным программированием.
#для_начинающих
reinterpret_castreinterpret_cast — это один из четырех операторов приведения типов в C++, которые используются для выполнения различных видов приведения типов. reinterpret_cast позволяет выполнить "пересмотр" типа, что означает, что он преобразует указатель или ссылку на один тип в указатель или ссылку на другой тип без каких-либо проверок или преобразований значений. Он используется для выполнения неявных преобразований между различными типами данных, и может привести к неопределенному поведению, если не используется осторожно.
Синтаксис reinterpret_cast выглядит так:
new_type = reinterpret_cast<new_type>(expression);Где
new_type — это тип, в который вы хотите преобразовать expression, и expression — это значение или выражение, которое вы хотите преобразовать.
Функторы
Функтор — это сокращение от функциональный объект, представляющий собой конструкцию, позволяющую использовать объект класса как функцию. В C++ для определения функтора достаточно описать класс, в котором переопределена операция ().
Выгода функтора состоит в том, что:
а). Его можно параметризовать при создании объекта (перед вызовом) используя конструктор объекта с параметрами/
б). Может создаваться временный объект исключительно на время выполнения функционального вызова.
#для_начинающих
Wt
Wt (Web Toolkit) — это C++ библиотека и фреймворк для разработки веб-приложений. Он предоставляет разработчикам инструменты и компоненты для создания интерактивных веб-приложений, которые могут работать как на сервере, так и на клиенте.
Для начала работы с Wt, вам потребуется установить библиотеку и ознакомиться с документацией, которая содержит подробные примеры и инструкции по разработке веб-приложений с использованием Wt.
https://www.webtoolkit.eu/wt
#для_продвинутых
Функция set_symmetric_difference
Функция set_symmetric_difference используется для нахождения симметрической разницы между двумя упорядоченными множествами (set) и записи её в другое множество. Симметрическая разница включает в себя элементы, которые присутствуют в одном из множеств, но не в обоих.
Обратите внимание, что перед использованием set_symmetric_difference, оба входных множества должны быть упорядочены (отсортированы), так как она оперирует с предположением о том, что входные множества уже отсортированы.
#для_продвинутых
std::weak_ptrstd::weak_ptr в C++ это часть стандартной библиотеки C++, которая используется для работы с умными указателями (smart pointers) и предназначена для решения проблемы циклических ссылок (cyclic references), которая может возникать при использовании std::shared_ptr.
Использование std::weak_ptr полезно в ситуациях, где существует потенциальная циклическая зависимость между объектами, и вы хотите избежать утечек памяти, связанных с этими зависимостями.
#для_начинающих
Veles
Veles — это высокопроизводительная библиотека для параллельного программирования на C++, разработанная Яндексом. Она предназначена для упрощения разработки высокопроизводительных приложений, использующих многоядерные процессоры и другие аппаратные ускорители.
#для_продвинутых
➡️ Управление ресурсами с помощью std::scoped_lock для нескольких мьютексов
В C++17 был представлен std::scoped_lock, который позволяет одновременно захватывать несколько мьютексов, гарантируя отсутствие взаимных блокировок (deadlocks).• Этот класс позволяет безопасно и одновременно захватывать несколько мьютексов. В отличие от использования std::lock_guard, который захватывает один мьютекс, std::scoped_lock предотвращает взаимные блокировки, которые могут возникнуть при попытке захвата нескольких мьютексов в произвольном порядке.• std::scoped_lock полезен в ситуациях, когда нужно гарантировать атомарность операций над несколькими разделяемыми ресурсами, минимизируя риск deadlock'ов.• При выходе из области видимости, std::scoped_lock автоматически отпускает все захваченные мьютексы, обеспечивая безопасное управление ресурсами.
😮💨Устали вручную разруливать зависимости в C++ проектах? Время автоматизировать процесс! 🕒💻
Пакетные менеджеры Conan и vcpkg позволяют легко управлять библиотеками, устанавливать зависимости и ускорять сборку. Разберем, как это работает, на открытом уроке.
Упростите себе жизнь: научитесь использовать пакетные менеджеры, чтобы писать код, а не разбираться с проблемами сборки.
Спикер Денис Злобин — старший инженер-программист в Astra Linux, опытный наставник разработчиков.
➡️Встречаемся 20 марта в 20:00 мск, разберем всё на практике! Участники получат скидку на большое обучение по разработке на С++.
Регистрация: https://otus.pw/99CL/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
➡️ Библиотека TOML11
TOML11 — это библиотека для парсинга и сериализации конфигурационных файлов в формате TOML (Tom's Obvious, Minimal Language) на C++. Она поддерживает полное соответствие спецификации TOML и позволяет легко работать с конфигурационными файлами, делая их удобными для человека и машины.• Если вы ищете простой и эффективный способ работы с конфигурациями в формате TOML в C++, TOML11 — отличный выбор.
🔗 Ссылочка на доку
Реальный кейс: создание REST API движка на С++
История, полная ошибок и боли белорусских разработчиков, которая поможет вам избежать типичных проблем при создании REST API.
Узнайте, стал ли этот проект успешным, на бесплатном вебинаре «Движок REST API на C++. Кейс компании СКБ Радиотехпроект (SKB RTP)».
Разберём:
1. Зачем писать свой движок REST
2. Swagger в C++ как fail
3. Почему Rest это не просто url — это философия
📆Когда: 25 марта в 19:00
Спикер: Юрий Вашинко, Tech Lead/Lead Developer
👉 Занять место на вебинаре — через бота.
В конце вебинара — подарок🎁
Вебинар проходит в рамках курса «Разработчик С++20».
#реклама
О рекламодателе
erid: 2W5zFH7QZRS
🔥 Меняете мир вокруг и IT-сферу?
Приходите на Яндекс Dev Day&Night — конференцию для мобильных и бэкенд-разработчиков, продактов и аналитиков!
⏰ Когда? 19 апреля
📍 Где? Москва
💡 Что вас ждёт?
– 5 треков докладов от экспертов
– Полезные знакомства и общение
– Тусовка до 2 ночи с коктейлями, диджеями и дискуссиями не под запись!
В прошлом году нас было 670 участников, а в этом будет ещё больше. Такое точно нельзя пропускать!
👉 Регистрируйтесь прямо сейчас и зовите друзей.
➡️ Библиотека Cereal — сериализация данных в C++
Cereal — это библиотека для сериализации данных в C++, которая поддерживает как текстовые, так и бинарные форматы. Она проста в использовании, но при этом гибка, предоставляя возможность легко сохранять и загружать сложные объекты и структуры данных.• Cereal — идеальный выбор для разработчиков, которым нужно сериализовать данные для сохранения в файлы или передачи по сети.
🔗 Ссылочка на доку
⚙️ std::accumulate
В C++ функция std::accumulate из заголовка <numeric> выполняет свёртку элементов диапазона, используя заданную операцию. По умолчанию используется суммирование, но можно задать любую ассоциативную операцию.
Remote Procedure Call
Remote Procedure Call (RPC) — это механизм, который позволяет вызывать удаленные процедуры или функции на удаленном компьютере, как если бы они были локальными. Это позволяет приложениям взаимодействовать через сеть или между процессами на одной машине.
Реализация RPC в C++ обычно включает в себя определение интерфейсов и методов, генерацию кода для клиентов и серверов на основе этих интерфейсов, и обработку удаленных вызовов. Конкретные шаги могут варьироваться в зависимости от выбранного фреймворка или библиотеки.
Важно отметить, что использование RPC может потребовать настройки сетевой инфраструктуры, обеспечения безопасности и обработки ошибок при удаленных вызовах.
На картинке упрощенный пример и не включает в себя надежную обработку ошибок и безопасность.
#для_продвинутых
Функция strrchr()
Функция strrchr() является частью стандартной библиотеки C и C++. Она используется для поиска последнего вхождения указанного символа в строке, представленной в виде массива символов (строки).
Параметры функции включают:str (const char*): Указатель на строку, в которой будет выполнен поиск.character (int): Символ, который вы ищете в строке.
Функция strrchr() возвращает указатель на последнее вхождение символа character в строке str. Если символ не найден, то функция возвращает нулевой указатель (nullptr).
#для_продвинутых
std::bad_any_caststd::bad_any_cast — это исключение (exception) в C++, которое возникает, когда происходит неудачное приведение типа (какие-либо приведения, которые осуществляются с использованием std::any) и тип данных, на который пытается быть приведен объект, не соответствует ожидаемому типу.std::any — это класс в стандартной библиотеке C++, который позволяет хранить значения разных типов данных внутри одного объекта. Это особенно удобно, когда вам нужно хранить значения разных типов в одной коллекции или передавать их между функциями.
#для_продвинутых
std::launch::asyncstd::launch::async — это одна из опций, доступных при создании объекта std::launch::async | std::launch::deferred в контексте создания потоков с использованием стандартной библиотеки C++ (поддерживается начиная с C++11). Эта опция определяет, каким образом будет запущена функция в новом потоке, когда вы используете std::async.std::launch::async указывает на то, что функция должна быть немедленно запущена в отдельном потоке (асинхронно). Это означает, что она выполнится в фоновом режиме и может начать выполнение даже до того, как объект std::future, возвращаемый std::async, будет использован для получения результата выполнения функции. В этом случае система управляет тем, как и когда будет создан новый поток.
#для_продвинутых
Функция reverse_copy
Функция reverse_copy относится к библиотеке <algorithm> и используется для копирования элементов из одного диапазона в другой в обратном порядке. Эта функция не изменяет исходный диапазон и создает новый диапазон, содержащий элементы из исходного диапазона, упорядоченные в обратном порядке.
#для_начинающих
std::launch::deferredstd::launch::deferred — это один из флагов, которые можно использовать при создании объекта std::thread в C++. Этот флаг указывает на то, что выполнение потока будет отложено до момента, когда будет вызван метод join() или detach() для этого потока.
Когда вы создаете объект std::thread с флагом std::launch::deferred, фактическое выполнение кода потока не начинается немедленно. Вместо этого поток будет запущен и выполнен только в тот момент, когда вы вызовете метод join() или detach() для этого объекта потока.
#для_продвинутых
MXNet
MXNet — это высокопроизводительная библиотека глубокого обучения с открытым исходным кодом, поддерживающая различные языки программирования, включая C++. Она предлагает широкий набор функций для создания, обучения и развертывания нейронных сетей.
#для_продвинутых
audioFlux
audioFlux — это библиотека C++ с открытым исходным кодом для работы со звуком. Она предоставляет простой и удобный интерфейс для выполнения различных задач, связанных с обработкой аудио.
#для_продвинутых
➡️ Локальные анонимные функции с использованием std::function и std::bind
В C++ можно использовать анонимные функции (лямбда-функции) не только для однократных вызовов, но и для создания сложных цепочек вызовов или отложенного выполнения.• С помощью std::function и std::bind можно создавать гибкие и мощные конструкции.• std::bind позволяет создавать новые функции с фиксированными значениями для некоторых аргументов. В примере выше создается функция addFive, которая всегда добавляет 5 к переданному ей значению.
➡️ Библиотека Boost.Hana• Boost.Hana — это библиотека для метапрограммирования в C++, которая предоставляет мощные инструменты для работы с типами и компиляции вычислений. Она позволяет реализовывать сложные вычисления на этапе компиляции, используя функциональный стиль программирования.• Boost.Hana особенно полезна, если вам нужно использовать метапрограммирование в C++ для создания сложных, но эффективных решений. Если вы хотите попробовать что-то новое в области метапрограммирования, обратите внимание на эту библиотеку.
🔗 Ссылочка на доку
➡️ Библиотека Boost.Beast
Boost.Beast — это библиотека C++, которая предоставляет классы и функции для работы с HTTP и WebSocket протоколами. Она основана на Boost.Asio и поддерживает как синхронные, так и асинхронные операции. Beast обеспечивает удобную работу с сетевыми протоколами и помогает легко строить HTTP-серверы и клиенты.• Boost.Beast — отличный выбор для разработчиков, которым нужно интегрировать HTTP и WebSocket в свои C++ приложения с минимальными усилиями.
🔗 Ссылочка на доку
➡️ Библиотека EasyLogging++
EasyLogging++ — это мощная и гибкая библиотека логирования для C++, которая поддерживает многопоточность и настраиваемый вывод. Она легко интегрируется в проекты и позволяет быстро настроить логирование с различными уровнями детализации, отладкой и фильтрацией.• EasyLogging++ — отличный выбор, если требуется добавить логирование в проект с минимальными усилиями и высокой производительностью.
🔗 Ссылочка на доку
➡️ Библиотека SOCI — удобная работа с базами данных в C++
SOCI (The C++ Database Access Library) — это библиотека, которая упрощает взаимодействие с различными базами данных, такими как PostgreSQL, MySQL, SQLite, и Oracle. Она предоставляет интерфейс, похожий на SQL, и позволяет работать с базами данных, используя простые и понятные C++-конструкции.• SOCI — отличный выбор для разработчиков, которым нужно легко интегрировать базы данных в C++ проекты, не жертвуя производительностью и удобством.
🔗 Ссылочка на доку
⚙️ std::bind
В C++ функция std::bind из заголовка <functional> позволяет создавать обёртки для функций, связывая определённые аргументы. Это удобно для частичного применения аргументов.
memsetmemset используется для заполнения блока памяти одним значением байта.
Она принимает указатель на блок памяти, значение байта для заполнения и размер блока в байтах.memset полезна для быстрого обнуления или заполнения блоков памяти.
Необходимо быть осторожным с типами данных, т. к. memset работает на уровне байтов.
#это_база