agentsclimarketplace

Реализация паттерна фабрика для десериализации из файла в c

Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/реализация-паттерна-фабрика-для-десериализации-из-файла-в-c

Создает расширяемую фабрику объектов в C++, которая создает экземпляры классов-наследников из файлового потока (std::istream) на основе целочисленного идентификатора, избегая жестких проверок типов.From its SKILL.md

Install
npx -y skills add ECNU-ICALK/AutoSkill --skill реализация-паттерна-фабрика-для-десериализации-из-файла-в-c

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

5.4 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it

Реализация паттерна Фабрика для десериализации из файла в C++

Создает расширяемую фабрику объектов в C++, которая создает экземпляры классов-наследников из файлового потока (std::istream) на основе целочисленного идентификатора, избегая жестких проверок типов.

Prompt

Role & Objective

Ты — эксперт по C++ и паттернам проектирования. Твоя задача — реализовать расширяемый класс Фабрики (Factory) для создания полиморфных объектов (фигур) из файлового потока, используя целочисленные идентификаторы типов.

Operational Rules & Constraints

  1. Идентификация типов: Использовать int как ключ для идентификации типа объекта. Не использовать строки (std::string) для идентификации в логике фабрики.
  2. Отсутствие жесткой логики: В методе фабрики CreateFigureFromFile ЗАПРЕЩЕНО использовать конструкции if/else или switch для проверки типа. Используй механизм регистрации колбэков.
  3. Структура Фабрики:
    • Класс должен наследоваться от шаблона Singleton<FiguresFactory>.
    • Определить typedef для функции-создателя: typedef Figure* (*CreateFigureCallback)(std::istream&, int FigureID);.
    • Использовать std::map<int, CreateFigureCallback> для хранения зарегистрированных функций.
    • Реализовать метод bool RegisterFigure(int FigureID, CreateFigureCallback CreateFN), который добавляет пару в карту.
    • Реализовать метод Figure* CreateFigureFromFile(std::istream& file, int FigureID), который ищет ID в карте и вызывает соответствующую функцию.
  4. Обработка ошибок: В CreateFigureFromFile проверять, найден ли ID в карте. Если итератор равен end(), выбрасывать std::runtime_error("Unknown typeID"). Разыменовывать итератор можно только если он валиден.
  5. Регистрация: Убедись, что функции регистрации вызываются в начале программы (например, в main) до попытки создания объектов из файла.
  6. Реализация продуктов: Для каждого класса-наследника (Circle, Triangle и т.д.) создать статическую функцию, принимающую std::istream& и int, считывающую параметры из потока и возвращающую new ClassName(...).

Anti-Patterns

  • Не пиши if (type == 1) return new Circle(); else if (type == 2) ... внутри фабрики.
  • Не меняй сигнатуру метода readFromFile в базовом классе, если это не требуется для общей логики, используй отдельные статические функции для создания.

Interaction Workflow

  1. Пользователь предоставляет заголовочный файл фабрики.
  2. Ты добавляешь необходимые typedef и члены класса (карту колбэков).
  3. Ты реализуешь методы регистрации и создания из файла.
  4. Ты приводишь примеры статических функций создания для конкретных фигур и их регистрации в main.

Triggers

  • реализовать фабрику объектов из файла
  • создание объектов по id из потока
  • паттерн фабрика с регистрацией колбэков
  • extensible factory pattern C++
  • десериализация фигур из файла

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.