Основная цель проекта - тестирование умений программирования на языке C++ у студентов.
- Ознакомление с принципами работы с проектом
- Потоковые манипуляторы ввода/вывода
- Прокси-объект
- Итератор
- Использование
std::variant
- Парсер JSON на основе
boost::spirit::x3
- Ассоциативный массив для хранения типа, в котором значения задаются в рантайме
- Написание тестов для диапазона со страйдом
Для успешной сборки необходимы следующие компоненты:
- C++-компилятор, поддерживающий минимальный стандарт C++-20
cmake
версии 3.15+- cmake-совместимая система сборки, например,
gnumake
илиninja
boost
версии 1.79+catch2
версии 3.0+
Необходимо из корня репозитория выполнить следующие команды (более подробно см. cmake):
$ cmake -B build -GNinja . $ cmake --build build $ cmake --build build test
Если работа осуществляется над конкретным заданием, нужно удалить первую строку return()
из файла CMakeLists.txt
.
Запуск теста конкретного задания (в логе тестов задание выглядит как <myproject>
):
$ cmake --build build $ ctest --test-dir build -R <myproject> -V
Флаг -V
показывает детальный отчёт запуска тестов.
Другой вариант запуска тестов - вызов исполнимого файла напрямую из директории задания в дереве сборки:
build/ $ ./<labN>/tests_<myproject>
Вместо команды cmake --build build
можно вызывать команду генератора сборки (для примера выше команда ninja
).
Использование nix-shell
возможно вне операционной системе NixOS.
Для этого подойдёт любая линукс-подобная система (даже MacOS или WSL для Windows10).
Установить nix
окружение можно с помощью команды sh <(curl -L https://nixos.org/nix/install) --no-daemon
, попутно ответив на несколько вопросов.
Далее перейдите в корень проекта, который необходимо собрать, и вызовите команду nix-shell
.
После загрузки пакетов в окружение проекта просто следуйте инструкции по сборке проекта с помощью cmake
.
Подходит для работы в Visual Studio Community edition.
- Склонировать проект и установить https://github.com/Microsoft/vcpkg.
- Интегрировать пакетный менеджер командой
vcpkg integrate install
. - Установить пакеты
catch2
иboost
командойvcpkg install <packet>:x64-windows
. - При сборки проекта с помощью
cmake
указать тулчейн vcpkg (см. документацию по vcpkg).
Каждое задание - это подпроект с файлами и папками:
- файл
CMakeLists.txt
; - директория
include
, которая представляет из себя "код" задания; - директория
tests
содержит код для проверки задания; - файл
README.rst
содержит полезную информацию о задании.
Студенты должны работать с файлами только из директории include
.
Исключением является последнее задание, где студентами необходимо править файлы в директории tests
.
Основной критерий сдачи задания - это прохождение всех тестов в подпроекте задания.
Как объявить и определить функцию внутри другой функции?
Как скопировать лямбда-функцию?
Как вызвать неконстантный метод класса члена класса, находясь в константном методе?
struct cba { std::ostream& o; } struct abc { void mark() const { obj.o << 123; } ?cba? obj; }
Как инициализировать переменные класса в разных конструкторах одинаково?
Как инициализировать переменную класса через отдельную функцию в списке инициализации конструктора?
Темы для собственных pet-проектов:
- INI-парсер с EBNF в комментариях;
- реализация мультиразмерного итератора с возможностью выбора направления итерации (по осям x, y или z и и.д.);
- реализация примера работы с google-protobuf;
- реализация битового итератора;
- реализация дуальных чисел.