Бросаем дичь #новичкам В С++ есть исключения. Вы можете их любить или ненавидеть, но от этого не сбежать(почти). Обычно как происходит. Есть стандартный std::exception или любой кастомный базовый класс исключения my_exception::BaseException. У них куча наследников и вот вы их бросаете в подходящих ситуациях. Но это же С++: "Вы думали, что бросать можно только исключения? Пфф. Не смешите мои подковы и подержите мое пиво." Бросать можно почти все, что угодно, что можно считать объектом. Например...
Грокаем C++
Два сеньора C++ - Владимир и Денис - отныне ваши гиды в этом дремучем мире плюсов. По всем вопросам (+ реклама) @ninjatelegramm Менеджер: @Spiral_Yuri Реклама: https://telega.in/c/grokaemcpp Мы на TGstat: https://tgstat.ru/channel/@grokaemcpp/stat
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
20 из 20Доступ к приватным членам. Явная инстанциация и друзья #опытным Оказывается способов легально залезть в непубличные кишки вашего класса довольно много, и сегодня обсудим еще один метод. Мы уже с вами говорили про дружественные функции и что им дозволено получать доступ к приватным членами класса. Но давайте посмотрим на следующий пример: template <typename T> struct Foo { friend void bar() { cout << "Got it!" << endl; } }; void bar(); template struct Foo<int>; bar(); У нас есть шаблонная струк...
CRTP + friend #опытным Допустим, вам нужно написать tcp и udp версии клиента для одной и той же задачи. Можно использовать динамический полиморфизм и переопределить все специфические методы. Но тогда у нас будет оверхед на динамическую диспетчеризацию вызова. Зачем тратить драгоценные миллинаносекунды, если можно воспользоваться compile-time полиморфизмом, а конкретно паттерном CRTP? Вот сильно упрощенная и обрезанная версия того, как это может выглядеть: template <typename Derived> class Clie...
Доступ к приватным членам. Sutter hack #опытным Спасибо @d7d1cd за идею для поста) В любой системе есть дырки, которые могут(и обязательно будут) эксплуатировать заинтересованные люди. Вот и в С++ так же. Сегодня мы раскроем, как можно стандартными относительно неинвазивными(не изменяя первоначальный код класса) инструментами изменять приватные поля класса. Возьмем простой класс: class X { public: X() : private_(1) {} template <class T> void f(const T &t) {} int Value() { return private_; } priv...
Доступ к приватным членам. Явная инстанциация #опытным В прошлый раз мы уже выяснили, что явно инстанцируя шаблонный метод класса, можно написать свою реализацию, которая будет жонглировать непубличными членами в самых виртуозных позах. Но! Мы так и не вышли за пределы класса. Ручная специализация шаблонного метода - это такой же метод класса, поэтому он и умеет трогать приватные поля. Хочется прям снаружи получить доступ к полю и уже не ограничиваться реализацией метода. С++ и это может вопло...
Как применять switch? #новичкам Мы вспомнили про switch и некоторые его особенности. Теперь посмотрим, в каких сценариях их адекватно применять и как это делать. Для начала повторим ограничения. switch может работать только с целочисленными значениями и перечислениями. В основном, конечно, с перечислениями как с именованными числами. В коде не должно быть магических чисел, каждая ветка должна иметь наглядную семантику, а перечисления помогают "называть" числа без неконтролируемого размножения ло...
Квиз #опытным В С++ даже очевидный на первый взгляд код может привести к весьма неожиданному исполнению. Допустим, мы вот хотим создать вектор пар строковых вьюшек и вывести это добро на консоль. Просто? Просто. Ну раз просто, тогда поучаствуйте в #quiz'е: какой будет результат попытки компиляции и запуска этого кода на С++23? #include <iostream> #include <string> #include <string_view> #include <vector> int main() { std::vector<std::pair<std::string_view, std::string_view>> pairs { {{"one", "tw...
Обзор книжки #3 Начнем с цитаты: "Языки программирования бывают двух видов: которые ругают, и на которых не пишут." С++ ругают все, кому не лень. Небезопасный, раздутый, нечитаемый и тд. Но есть индустрия, в которой С++ любят и никуда с него не будут уходить - геймдев. Им нужен высокоуровневый инструмент, с помощью которого можно просто реализовывать сложные абстракции. Но этого не хватает: в условиях, когда для портирования игры нужно экономить буквально мегабайты памяти и микросекунды исполн...
switch #новичкам switch - это такая базовая штука, которая изучается в самом начале вместе с другими core-конструкциями языка типа условий и циклов. Правда после изучения она становится той книжкой на полке, которую редко трогают и ее достают скорее, чтобы протереть. Поэтому некоторые особенности switch забываются, а в голове новичков зачастую нет понимания, когда и как его все-таки использовать. Сегодня проясним особенности, а в следующий раз поговорим о кейсах применимости. Но для начала пойде...