Каждый более менее опытный разработчик при чтении кода (легаси и не только) сталкивался с циклами итерации по элементам вектора следующего вида: for(int i = 0; i < vec.size(); ++i) { /* обрабатываем значение vec[i]*/}. Хотя в С++ давно изобрели способы избавиться от такой записи цикла, начиная с std::for_each и заканчивая более лаконичной for(const auto& el : vec), но длинную форму for до сих пор можно встретить довольно часто. Она порождает предупреждения при компиляции: warning: comparison...
Программист-практик
Введение в шаблонную магию С++
Наверное каждый программист на С++ слышал выражение "магия шаблонов" или "шаблонная магия". Сегодня начнем разбираться в том, что же она из себя представляет. "Магия" — это использование механизма шаблонов (template) для вычислений, проверок и трансформации кода на этапе компиляции, а не во время выполнения программы. Программисты называют это "магией", потому что сложный шаблонный код заставляет компилятор выполнять полноценные логические операции (ветвления, эмуляцию циклов через рекурсию) ещё до запуска программы...
Всё что вы хотели знать об умных указателях в С++
Сегодня поговорим об использовании интеллектуальных указателей в реальных проектах. Разберем вопросы о том каковы основные сценарии использования weak_ptr в паре с shared_ptr, как устроены shared_ptr и weak_ptr "под капотом", изучим накладные расходы при использовании shared_ptr и weak_ptr, а также большое количество связанных с этим проблем. Предполагается наличие у читателя предварительных знаний о назначении интеллектуальных указателей. Использование std::weak_ptr вместе с std::shared_ptr —...
Применяем пользовательские типы для предотвращения ошибок в передаче параметров в С++
Допустим что перед нами стоит задача разработать тип данных, задающий положение на плоскости некторой точки, например, персонажа компьютерной игры. Первый вариант может выглядеть следующим образом: class Coord { int x_, y_; public: Coord(int x, int y) : x_(x), y_(y) {} //далее идут методы для работы с координатами }; Несмотря на крайнюю простоту, при использовании Coord может возникнуть проблема, связанная с тем, что оба параметра конструктора имеют один и тот же тип. Следовательно, передаваемые...
Тестируем код зависящий от временных интервалов
Представим что Вам нужно протестировать функцию, которая работает со временем, ожидая, к примеру, 5 секунд. Как протестировать такой код в google mock чтобы при каждом прогоне теста не ждать 5 секунд? Для того, чтобы тесты выполнялись мгновенно, необходимо вынести функционал работы с системным временем в отдельную абстракцию. Вместо прямого вызова std::this_thread::sleep_for или использования std::chrono::system_clock код должен обращаться к интерфейсу, абстрагирующему работу со временем. class...
