Класс NPC
здесь должен быть конкретный класс с реальными реализациями всех виртуальных функций. Это может быть минимальный простой NP C, где реализации - это основы c logi c, которые следует использовать, если декораторы вообще не применяются. Обратите внимание, что у него даже нет члена-указателя для перенаправления.
Класс NPCDecorator
должен иметь функции, перенаправляющие все виртуальные вызовы интерфейса publi c на его npc
член-указатель.
Декораторам c, таким как Elite
и Shaman
, нужно только определять виртуальные функции, в которых они изменяют поведение. Если Elite
не влияет на то, что делает func2
, он может полностью пропустить объявление и определение func2
, так как это будет видно из базового класса NPCDecorator
.
. Я определенно изменил бы все указатели на std::unique_ptr
и все new
выражения для std::make_unique
здесь, чтобы избежать написания кода ручной очистки и возможности появления множества ошибок и головной боли.