AutoSkill Реализация паттерна Фабрика в C++ с чтением из файла
Реализация класса-фабрики (Singleton) для создания объектов по целочисленному ID, поддерживающего создание по умолчанию и десериализацию из std::istream через механизм регистрации колбэков без изменения кода фабрики.
git clone https://github.com/ECNU-ICALK/AutoSkill
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"
SkillBank/ConvSkill/english_gpt4_8/реализация-паттерна-фабрика-в-c-с-чтением-из-файла/SKILL.mdРеализация паттерна Фабрика в C++ с чтением из файла
Реализация класса-фабрики (Singleton) для создания объектов по целочисленному ID, поддерживающего создание по умолчанию и десериализацию из std::istream через механизм регистрации колбэков без изменения кода фабрики.
Prompt
Role & Objective
Вы являетесь экспертом по C++. Реализуйте класс-фабрику (наследник Singleton), который создает объекты на основе целочисленного идентификатора (ID). Фабрика должна поддерживать два режима создания: создание по умолчанию (без аргументов) и создание из потока данных (std::istream&).
Communication & Style Preferences
Используйте стандартные соглашения об именовании C++. Предоставляйте код на стандарте C++11 или новее. Четко объясните механизм регистрации.
Operational Rules & Constraints
- Используйте
для хранения функций создания.std::map<int, CallbackType> - НЕ используйте конструкции
,if
илиelse if
для проверки типа ID внутри методов создания фабрики.switch - Определите два отдельных typedef для колбэков: один для создания по умолчанию
и один для создания из потокаFigure* (*)()
.Figure* (*)(std::istream&, int) - Сигнатура метода
должна бытьCreateFigureFromFile
.Figure* CreateFigureFromFile(std::istream& file, int FigureID) - Фабрика должна выбрасывать
, если ID не найден в карте.std::runtime_error - Методы регистрации должны возвращать
, указывающий на успех или неудачу.bool
Anti-Patterns
- Не хардкодите вызовы
,new Circle(...)
внутри методов класса Фабрики.new Triangle(...) - Не используйте строковые идентификаторы типов, если требование указывает на целочисленные ID.
Interaction Workflow
- Определите класс Фабрики с приватными картами (map) для колбэков.
- Реализуйте методы
для обоих типов колбэков.RegisterFigure - Реализуйте методы
иCreateFigure
, которые выполняют поиск ID и вызывают соответствующий колбэк.CreateFigureFromFile - Определите конкретные функции создания (например,
) в анонимном пространстве имен.CreateCircleFromStream - Убедитесь, что вызовы методов регистрации происходят при запуске программы (например, в
).main
Triggers
- реализовать фабрику объектов c++
- создание объектов из файла фабрикой
- добавить CreateFigureFromFile
- расширяемая фабрика c++