Библиотека C/C++ разработчика | cpp, boost, qt
20.4K subscribers
1.74K photos
46 videos
16 files
3.92K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
✏️ Промпт дня: Создание юнит-тестов для надёжного кода

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


☀️ Решение с помощью AI

Please write unit tests for [имя файла и модуля] to ensure its proper functioning

[ВСТАВЬТЕ ВАШ КОД ЗДЕСЬ]



🧋 Пример трансформации

До:

class Calculator {
public:
int add(int a, int b) { return a + b; }
int divide(int a, int b) {
if (b == 0) throw std::invalid_argument("Division by zero");
return a / b;
}
};


После:

#include <gtest/gtest.h>

TEST(CalculatorTest, AddPositiveNumbers) {
Calculator calc;
EXPECT_EQ(calc.add(2, 3), 5);
}

TEST(CalculatorTest, DivideByZero) {
Calculator calc;
EXPECT_THROW(calc.divide(10, 0), std::invalid_argument);
}

TEST(CalculatorTest, DivideNormalCase) {
Calculator calc;
EXPECT_EQ(calc.divide(10, 2), 5);
}



✏️ Как часто вы пишете юнит-тесты для своего C++ кода?


🐸Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥71👍1
💬 Истории подписчиков: Google Test vs Catch2 vs собственный framework

Недавно один из читателей поделился своей историей — возможно, она откликнется и вам:

Работаю над embedded системой на C++, нужно покрыть тестами критичный код. Использую Google Test уже два года, но начинаю сомневаться в выборе. Фреймворк тяжелый, долго компилируется, плюс не всегда удобно для embedded разработки.

Попробовал Catch2 — понравилось! Header-only, быстрая компиляция, красивые assertion'ы. Но есть проблема: на некоторых микроконтроллерах не хватает памяти для всех template instantiation'ов.

Коллега использует doctest — еще более легковесный, но менее функциональный. Много чего нету. Есть еще Boost.Test, но это еще одна зависимость.

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


🤔 А вы какой фреймворк используете в своих проектах?

Библиотека C/C++ разработчика #междусобойчик
❤‍🔥42🔥2🤩1
Media is too big
VIEW IN TELEGRAM
Как относитесь к созданию своего жпт не через конструктор, а хардкорно через код?

🔥 — я своего завайбкодил

🏃‍♀️ Ссылка на курс
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4
🚀 Мгновенное создание реализаций методов класса

Проблема: 🤔 При разработке классов в C++ приходится сначала объявлять методы в заголовочном файле, а затем вручную создавать их реализации в .cpp файле, что требует времени и может привести к ошибкам.

Решение: 🎯 Автоматическое создание реализаций методов класса в соответствующем .cpp файле.

Комбинации клавиш:

• CLion: Alt+Enter на объявлении → Implement methods
• Visual Studio: Ctrl+. на объявлении → Implement all missing members
• VSCode (с C/C++ расширением): Alt+Shift+I

📝 Процесс в CLion:

• Объявите методы в заголовочном файле
• Нажмите Alt+Enter на имени класса
• Выберите Implement methods
• Выберите методы для реализации и целевой файл
• Все выбранные методы будут автоматически созданы с правильным синтаксисом

💡 Эта функция также позволяет:
• Генерировать стандартные методы (конструкторы, деструкторы, операторы)
• Создать все недостающие реализации методов сразу
• Добавлять реализации в уже существующие файлы

Библиотека C/C++ разработчика #буст
6👍2🙏2
🐸 Основные способы вызова C++ кода из Python
«Хочу скорость C++, но удобство Python для отладки и экспериментов» — знакомая дилемма многих разработчиков при работе с вычислительными задачами.


💡 Рассматриваем два подхода к интеграции C++ с Python: PyBind11 vs ctypes, их плюсы и подводные камни.


❗️ Ключевые моменты статьи:

• PyBind11 обеспечивает высокоуровневую интеграцию с автоматическим преобразованием типов
• ctypes — низкоуровневое решение с множеством ограничений
• полная интеграция с Numpy и Eigen из коробки через PyBind11

Основной фокус — создание Facade-класса для простого API между языками и настройка CMake для автоматической сборки.

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

⚠️ Важный подводный камень: после перекомпиляции C++ кода модуль Python не перезагружается автоматически — требуется полный перезапуск сессии Python.


👉 Статья

Библиотека C/C++ разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
4🥱3👍1😁1
😆 Самые быстрые штуки на земле:

• Гепард
• Самолёт
• Скорость света
• Приложения, которые я перенёс с Python на C++

Библиотека C/C++ разработчика #развлекалово
😁282👍1👏1
Загадка: Я не член семьи, но мне доверяют семейные секреты. Я могу войти в дом без стука. Кто я?

😼 Ответ пишите в комментариях.

Библиотека C/C++ разработчика #междусобойчик
3
📰 Свеженькое из мира C++

Подготовили подборку самых интересных материалов за неделю о разных аспектах программирования и интересных проектах в мире C++.

😎 Полезное:

Генерация документации из кода — автогенерация документация кода в Doxygen
Тезисы о std::set и std::multiset в C++ — статья в которой разбираются ключевые различия между std::set и std::multiset
Особенности std::unreachable — полезная фишка, которую можно использовать для оптимизации
Создание юнит-тестов для надёжного кода — способ создания юнит-тестов с помощью AI
Мгновенное создание реализаций методов класса — автореализация методов с помощью IDE
Основные способы вызова C++ кода из Python — основные возможности совместного использования Python и C++

🖨Интересные проекты:

Carbon Language — язык общего назначения, созданный Google как приемник C++
MuseScore — это бесплатная программа для записи нот
pybind11 — библиотека состоящая только из заголовков, которая представляет типы C++ в Python и наоборот

Библиотека C/C++ разработчика #свежак
2👍1🔥1
☝️ Последний шанс купить курсы Proglib Academy с доступом навсегда!

Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).

Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!

👉 Выбрать курс
🏖️ Подборка вакансий для C++-разработчиков за неделю

C++ Developer (Middle+/Senior) — от 263 000 и до 325 000 ₽ Удалёнка

Senior C++ Developer / Tech Lead — от 400 000 ₽ Гибрид (Москва)

Разработчик С/С++ — до 300 000 ₽ Гибрид (Москва)

Старший C++ разработчик для высоконагруженных систем — Офис (Релокация в г. Лимасол, Кипр) 5000-7000 € до налогов

C разработчик (Platform V Monitor) — до 300 000 ₽ Офис (Москва, Санкт-Петербург, Казань)

C++ Разработчик — от 250 000 и до 350 000 ₽ Гибрид (Москва)

C++/Qt Developer (Рефакторинг) — от 260 000 ₽ Гибрид (Москва, Санкт-Петербург)

Библиотека C/C++ разработчика
🌲 Концепты в C++

Хотите безопасную сериализацию? Создайте концепт для проверки того, что тип можно сериализовать и десериализовать.


✏️ Создание концепта:

1️⃣ Определите требования к типу
2️⃣ Проверьте наличие методов
3️⃣ Используйте в шаблонах


#include <concepts>
#include <iostream>
#include <string>
#include <sstream>

// Концепт для сериализуемых типов
template<typename T>
concept Serializable = requires(T obj, std::ostream& os, std::istream& is) {
{ obj.serialize(os) } -> std::same_as<void>;
{ T::deserialize(is) } -> std::same_as<T>;
};

// Пример сериализуемого класса
struct Person {
std::string name;
int age;

void serialize(std::ostream& os) const {
os << name << " " << age;
}

static Person deserialize(std::istream& is) {
Person p;
is >> p.name >> p.age;
return p;
}
};

// Функция для работы с сериализуемыми объектами
template<Serializable T>
void save_and_load(const T& obj) {
std::stringstream ss;

// Сериализация
obj.serialize(ss);
std::cout << "Serialized: " << ss.str() << std::endl;

// Десериализация
T loaded = T::deserialize(ss);
std::cout << "Deserialized successfully" << std::endl;
}

// Использование
void example() {
Person p{"Alice", 25};
save_and_load(p); // Работает

// save_and_load(42); // Ошибка компиляции
}



😡 Частые ошибки:

Забывают про static методы в концептах
Не учитывают const-correctness
Создают слишком жёсткие требования


⛄️ Практический совет:

Концепты помогают создавать self-documenting API и ловить ошибки на этапе компиляции.

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
😼 Три совета, как не выучить C++ за 21 день

💡Сотрудник из компании МойОфис делится субъективным, но честным гайдом о том, как правильно подойти к изучению C++ и не сгореть в процессе.

❗️ Ключевые моменты статьи:

• сначала поймите, действительно ли вам нужен C++ или это просто хайп
• лучший способ начать — курс лекций Константина Владимирова (МФТИ)
• найдите опытного ментора и активно участвуйте в комьюнити

Основной фокус — практический подход к изучению через книги (Страуструп vs C++ Primer), написание собственных проектов и постепенное углубление в специализированные области.
Особенно актуально для студентов технических вузов и тех, кто хочет перейти от учебных задачек к коммерческой разработке.

Автор честно предупреждает: изучение C++ — это не гонка, а долгое путешествие. Попытки «схватить всё и сразу» приведут только к выгоранию и разочарованию вместо уверенных знаний языка.

👉 Статья

Библиотека C/C++ разработчика
🔥123🥱3👍2🤩2
🌚 Стандартная библиотека C++ — это сплошные костыли и велосипеды, пора от неё избавиться?

💡 Автор статьи пошёл дальше критики и создал собственную библиотеку, которая заменяет стандартную библиотеку C++ с нуля.

❗️ Ключевые моменты библиотеки:

• замена std::tuple на альтернативу с операциями нарезки и мутации
• best::variant вместо std::variant с поддержкой совмещения
• best::result как аналог Rust's Result<T, E> для обработки ошибок

Основной фокус — создание современной библиотеки, которая использует метапрограммирование, улучшенные контейнеры и новую парадигму итерации на основе Rust Iterator.

Особенно актуально для разработчиков, которые устали от многословности стандартных алгоритмов и хотят более элегантный API для работы с контейнерами и обработкой ошибок.
Автор доказывает, что можно создать библиотеку, которая превосходит даже Google Abseil, используя современные возможности языка и отказавшись от legacy-решений стандартной библиотеки.

👉 Статья

Библиотека C/C++ разработчика
😁123🔥1🥰1
🤩 Встречайте ImHex!

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


❗️ImHex — это современный hex-редактор, который понимает ваши боли:

▶️ Умное распознавание форматов — автоматически определяет структуру файлов
▶️ Визуализация данных — графики и цветовая подсветка вместо серых байтов
▶️ Встроенный дизассемблер — поддержка множества архитектур (ARM, x86, даже MOS 6502!)
▶️ LLVM-декомпилятор — разбирает искажённые имена символов
▶️ Процессор данных — режет и склеивает бинарники как профи
▶️ Кроссплатформенность — работает везде, где есть C++

Бесплатный, open-source, с активным комьюнити. Идеально для reverse engineering и системного программирования.

👉 Видео

Библиотека C/C++ разработчика
🔥10❤‍🔥32💯1
⚡️ Фича дня: std::views::transform

🐼 Проблема:

Преобразование элементов контейнера требует создания нового контейнера, что тратит память и время.


✏️ Решение:

views::transform создает ленивое представление с трансформацией на лету.

🔴 До:
cppstd::vector<std::string> strings;
for (const auto& num : numbers) {
strings.push_back(std::to_string(num));
}


🟢 После:
auto string_view = numbers | std::views::transform([](int x) { 
return std::to_string(x);
});



❗️Практические применения:

- Преобразование данных в конвейерах
- Форматирование без промежуточных контейнеров
- Цепочки трансформаций

⚡️ Используете transform views для оптимизации?

Библиотека C/C++ разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3