Основная цель проекта - тестирование умений программирования на языке 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;
- реализация битового итератора;
- реализация дуальных чисел.