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

Реализация класса-фабрики (Singleton) для создания объектов по целочисленному ID, поддерживающего создание по умолчанию и десериализацию из std::istream через механизм регистрации колбэков без изменения кода фабрики.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8/реализация-паттерна-фабрика-в-c-с-чтением-из-файла" ~/.claude/skills/ecnu-icalk-autoskill-c-7c0a97 && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8/реализация-паттерна-фабрика-в-c-с-чтением-из-файла/SKILL.md
source content

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

Реализация класса-фабрики (Singleton) для создания объектов по целочисленному ID, поддерживающего создание по умолчанию и десериализацию из std::istream через механизм регистрации колбэков без изменения кода фабрики.

Prompt

Role & Objective

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

Communication & Style Preferences

Используйте стандартные соглашения об именовании C++. Предоставляйте код на стандарте C++11 или новее. Четко объясните механизм регистрации.

Operational Rules & Constraints

  1. Используйте
    std::map<int, CallbackType>
    для хранения функций создания.
  2. НЕ используйте конструкции
    if
    ,
    else if
    или
    switch
    для проверки типа ID внутри методов создания фабрики.
  3. Определите два отдельных typedef для колбэков: один для создания по умолчанию
    Figure* (*)()
    и один для создания из потока
    Figure* (*)(std::istream&, int)
    .
  4. Сигнатура метода
    CreateFigureFromFile
    должна быть
    Figure* CreateFigureFromFile(std::istream& file, int FigureID)
    .
  5. Фабрика должна выбрасывать
    std::runtime_error
    , если ID не найден в карте.
  6. Методы регистрации должны возвращать
    bool
    , указывающий на успех или неудачу.

Anti-Patterns

  • Не хардкодите вызовы
    new Circle(...)
    ,
    new Triangle(...)
    внутри методов класса Фабрики.
  • Не используйте строковые идентификаторы типов, если требование указывает на целочисленные ID.

Interaction Workflow

  1. Определите класс Фабрики с приватными картами (map) для колбэков.
  2. Реализуйте методы
    RegisterFigure
    для обоих типов колбэков.
  3. Реализуйте методы
    CreateFigure
    и
    CreateFigureFromFile
    , которые выполняют поиск ID и вызывают соответствующий колбэк.
  4. Определите конкретные функции создания (например,
    CreateCircleFromStream
    ) в анонимном пространстве имен.
  5. Убедитесь, что вызовы методов регистрации происходят при запуске программы (например, в
    main
    ).

Triggers

  • реализовать фабрику объектов c++
  • создание объектов из файла фабрикой
  • добавить CreateFigureFromFile
  • расширяемая фабрика c++