Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

cvlabmiet/master-programming-task

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

О проекте

Основная цель проекта - тестирование умений программирования на языке C++ у студентов.

Список заданий

  1. Ознакомление с принципами работы с проектом
  2. Потоковые манипуляторы ввода/вывода
  3. Прокси-объект
  4. Итератор
  5. Использование std::variant
  6. Парсер JSON на основе boost::spirit::x3
  7. Ассоциативный массив для хранения типа, в котором значения задаются в рантайме
  8. Написание тестов для диапазона со страйдом

Зависимости

Для успешной сборки необходимы следующие компоненты:

  1. C++-компилятор, поддерживающий минимальный стандарт C++-20
  2. cmake версии 3.15+
  3. cmake-совместимая система сборки, например, gnumake или ninja
  4. boost версии 1.79+
  5. catch2 версии 3.0+

Как собирать?

cmake

Необходимо из корня репозитория выполнить следующие команды (более подробно см. 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

Использование nix-shell возможно вне операционной системе NixOS. Для этого подойдёт любая линукс-подобная система (даже MacOS или WSL для Windows10).

Установить nix окружение можно с помощью команды sh <(curl -L https://nixos.org/nix/install) --no-daemon, попутно ответив на несколько вопросов. Далее перейдите в корень проекта, который необходимо собрать, и вызовите команду nix-shell. После загрузки пакетов в окружение проекта просто следуйте инструкции по сборке проекта с помощью cmake.

vcpkg

Подходит для работы в 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. Основной критерий сдачи задания - это прохождение всех тестов в подпроекте задания.

Вопросы для саморазвития

  1. Как объявить и определить функцию внутри другой функции?

  2. Как скопировать лямбда-функцию?

  3. Как вызвать неконстантный метод класса члена класса, находясь в константном методе?

    struct cba
    {
        std::ostream& o;
    }
    
    struct abc
    {
        void mark() const
        {
            obj.o << 123;
        }
    
        ?cba? obj;
    }
    
  4. Как инициализировать переменные класса в разных конструкторах одинаково?

  5. Как инициализировать переменную класса через отдельную функцию в списке инициализации конструктора?

Темы для собственных pet-проектов:

  • INI-парсер с EBNF в комментариях;
  • реализация мультиразмерного итератора с возможностью выбора направления итерации (по осям x, y или z и и.д.);
  • реализация примера работы с google-protobuf;
  • реализация битового итератора;
  • реализация дуальных чисел.

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.