Senior C++ Developer
13K subscribers
1.26K photos
3 videos
576 links
№ 4931128893
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr
Download Telegram
➡️ Библиотека Boost.Beast

Boost.Beast — это библиотека C++, которая предоставляет классы и функции для работы с HTTP и WebSocket протоколами. Она основана на Boost.Asio и поддерживает как синхронные, так и асинхронные операции. Beast обеспечивает удобную работу с сетевыми протоколами и помогает легко строить HTTP-серверы и клиенты.

Boost.Beast — отличный выбор для разработчиков, которым нужно интегрировать HTTP и WebSocket в свои C++ приложения с минимальными усилиями.

🔗 Ссылочка на доку
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Библиотека TOML11

TOML11 — это библиотека для парсинга и сериализации конфигурационных файлов в формате TOML (Tom's Obvious, Minimal Language) на C++. Она поддерживает полное соответствие спецификации TOML и позволяет легко работать с конфигурационными файлами, делая их удобными для человека и машины.

Если вы ищете простой и эффективный способ работы с конфигурациями в формате TOML в C++, TOML11 — отличный выбор.

🔗 Ссылочка на доку
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Библиотека Boost.Hana

Boost.Hana — это библиотека для метапрограммирования в C++, которая предоставляет мощные инструменты для работы с типами и компиляции вычислений. Она позволяет реализовывать сложные вычисления на этапе компиляции, используя функциональный стиль программирования.

Boost.Hana особенно полезна, если вам нужно использовать метапрограммирование в C++ для создания сложных, но эффективных решений. Если вы хотите попробовать что-то новое в области метапрограммирования, обратите внимание на эту библиотеку.

🔗 Ссылочка на доку
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Локальные анонимные функции с использованием std::function и std::bind

В C++ можно использовать анонимные функции (лямбда-функции) не только для однократных вызовов, но и для создания сложных цепочек вызовов или отложенного выполнения.

С помощью std::function и std::bind можно создавать гибкие и мощные конструкции.

• std::bind позволяет создавать новые функции с фиксированными значениями для некоторых аргументов. В примере выше создается функция addFive, которая всегда добавляет 5 к переданному ей значению.
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Управление ресурсами с помощью std::scoped_lock для нескольких мьютексов

В C++17 был представлен std::scoped_lock, который позволяет одновременно захватывать несколько мьютексов, гарантируя отсутствие взаимных блокировок (deadlocks).

Этот класс позволяет безопасно и одновременно захватывать несколько мьютексов. В отличие от использования std::lock_guard, который захватывает один мьютекс, std::scoped_lock предотвращает взаимные блокировки, которые могут возникнуть при попытке захвата нескольких мьютексов в произвольном порядке.

• std::scoped_lock полезен в ситуациях, когда нужно гарантировать атомарность операций над несколькими разделяемыми ресурсами, минимизируя риск deadlock'ов.

При выходе из области видимости, std::scoped_lock автоматически отпускает все захваченные мьютексы, обеспечивая безопасное управление ресурсами.
Please open Telegram to view this post
VIEW IN TELEGRAM
audioFlux

audioFlux — это библиотека C++ с открытым исходным кодом для работы со звуком. Она предоставляет простой и удобный интерфейс для выполнения различных задач, связанных с обработкой аудио.

#для_продвинутых
Veles

Veles — это высокопроизводительная библиотека для параллельного программирования на C++, разработанная Яндексом. Она предназначена для упрощения разработки высокопроизводительных приложений, использующих многоядерные процессоры и другие аппаратные ускорители.

#для_продвинутых
MXNet

MXNet — это высокопроизводительная библиотека глубокого обучения с открытым исходным кодом, поддерживающая различные языки программирования, включая C++. Она предлагает широкий набор функций для создания, обучения и развертывания нейронных сетей.

#для_продвинутых
std::weak_ptr

std::weak_ptr в C++ это часть стандартной библиотеки C++, которая используется для работы с умными указателями (smart pointers) и предназначена для решения проблемы циклических ссылок (cyclic references), которая может возникать при использовании std::shared_ptr.

Использование std::weak_ptr полезно в ситуациях, где существует потенциальная циклическая зависимость между объектами, и вы хотите избежать утечек памяти, связанных с этими зависимостями.

#для_начинающих
std::launch::deferred

std::launch::deferred — это один из флагов, которые можно использовать при создании объекта std::thread в C++. Этот флаг указывает на то, что выполнение потока будет отложено до момента, когда будет вызван метод join() или detach() для этого потока.

Когда вы создаете объект std::thread с флагом std::launch::deferred, фактическое выполнение кода потока не начинается немедленно. Вместо этого поток будет запущен и выполнен только в тот момент, когда вы вызовете метод join() или detach() для этого объекта потока.

#для_продвинутых
Функция set_symmetric_difference

Функция set_symmetric_difference используется для нахождения симметрической разницы между двумя упорядоченными множествами (set) и записи её в другое множество. Симметрическая разница включает в себя элементы, которые присутствуют в одном из множеств, но не в обоих.

Обратите внимание, что перед использованием set_symmetric_difference, оба входных множества должны быть упорядочены (отсортированы), так как она оперирует с предположением о том, что входные множества уже отсортированы.

#для_продвинутых
Функция reverse_copy

Функция reverse_copy относится к библиотеке <algorithm> и используется для копирования элементов из одного диапазона в другой в обратном порядке. Эта функция не изменяет исходный диапазон и создает новый диапазон, содержащий элементы из исходного диапазона, упорядоченные в обратном порядке.

#для_начинающих
Wt

Wt (Web Toolkit) — это C++ библиотека и фреймворк для разработки веб-приложений. Он предоставляет разработчикам инструменты и компоненты для создания интерактивных веб-приложений, которые могут работать как на сервере, так и на клиенте.

Для начала работы с Wt, вам потребуется установить библиотеку и ознакомиться с документацией, которая содержит подробные примеры и инструкции по разработке веб-приложений с использованием Wt.

https://www.webtoolkit.eu/wt

#для_продвинутых
std::launch::async

std::launch::async — это одна из опций, доступных при создании объекта std::launch::async | std::launch::deferred в контексте создания потоков с использованием стандартной библиотеки C++ (поддерживается начиная с C++11). Эта опция определяет, каким образом будет запущена функция в новом потоке, когда вы используете std::async.

std::launch::async указывает на то, что функция должна быть немедленно запущена в отдельном потоке (асинхронно). Это означает, что она выполнится в фоновом режиме и может начать выполнение даже до того, как объект std::future, возвращаемый std::async, будет использован для получения результата выполнения функции. В этом случае система управляет тем, как и когда будет создан новый поток.

#для_продвинутых
Функторы

Функтор — это сокращение от функциональный объект, представляющий собой конструкцию, позволяющую использовать объект класса как функцию. В C++ для определения функтора достаточно описать класс, в котором переопределена операция ().

Выгода функтора состоит в том, что:
а). Его можно параметризовать при создании объекта (перед вызовом) используя конструктор объекта с параметрами/
б). Может создаваться временный объект исключительно на время выполнения функционального вызова.

#для_начинающих
std::bad_any_cast

std::bad_any_cast — это исключение (exception) в C++, которое возникает, когда происходит неудачное приведение типа (какие-либо приведения, которые осуществляются с использованием std::any) и тип данных, на который пытается быть приведен объект, не соответствует ожидаемому типу.

std::any — это класс в стандартной библиотеке C++, который позволяет хранить значения разных типов данных внутри одного объекта. Это особенно удобно, когда вам нужно хранить значения разных типов в одной коллекции или передавать их между функциями.

#для_продвинутых
reinterpret_cast

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

Синтаксис reinterpret_cast выглядит так:

new_type = reinterpret_cast<new_type>(expression);

Где new_type — это тип, в который вы хотите преобразовать expression, и expression — это значение или выражение, которое вы хотите преобразовать.

#для_продвинутых
Функция strrchr()

Функция strrchr() является частью стандартной библиотеки C и C++. Она используется для поиска последнего вхождения указанного символа в строке, представленной в виде массива символов (строки).

Параметры функции включают:

str (const char*): Указатель на строку, в которой будет выполнен поиск.
character (int): Символ, который вы ищете в строке.
Функция strrchr() возвращает указатель на последнее вхождение символа character в строке str. Если символ не найден, то функция возвращает нулевой указатель (nullptr).

#для_продвинутых
decltype

decltype — это ключевое слово в C++, которое используется для определения типа выражения или значения. Оно позволяет вам извлекать тип из выражения во время компиляции, что может быть полезно в ряде ситуаций, таких как определение типа переменных, создание алиасов типов и т.д. decltype полезен, когда вы хотите, чтобы тип переменной был автоматически выведен на основе типа выражения, с которым вы работаете.

decltype также может быть полезен в более сложных выражениях, включая использование операторов, а также при работе с шаблонами и обобщенным программированием.

#для_начинающих
Remote Procedure Call

Remote Procedure Call (RPC) — это механизм, который позволяет вызывать удаленные процедуры или функции на удаленном компьютере, как если бы они были локальными. Это позволяет приложениям взаимодействовать через сеть или между процессами на одной машине.

Реализация RPC в C++ обычно включает в себя определение интерфейсов и методов, генерацию кода для клиентов и серверов на основе этих интерфейсов, и обработку удаленных вызовов. Конкретные шаги могут варьироваться в зависимости от выбранного фреймворка или библиотеки.

Важно отметить, что использование RPC может потребовать настройки сетевой инфраструктуры, обеспечения безопасности и обработки ошибок при удаленных вызовах.

На картинке упрощенный пример и не включает в себя надежную обработку ошибок и безопасность.

#для_продвинутых