Показать страницуИстория страницыСсылки сюдаЭкспорт в PDFНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Основные паттерны ====== ===== Синглтон ===== Иногда вам надо получить инициализированную ссылку на конкретную Сущность, которая представляет собой глобальную комбинацию трейтов. Этого можно достичь через такой паттерн, как //синглтон//, который применяется в классическом ООП подходе. Вы можете полностью достичь этого с помощью простого метода:<code cpp> template < typename T, typename ...Ts > T GetSingleton(AMechanism* const Mechanism) { const auto Filter = FFilter::Make<T, Ts...>(); const auto Chain = Mechanism->Enchain(Filter); auto Cursor = Chain->Iterate(0, 1); if (!Cursor.Provide()) { checkNoEntry(); return T(); } const auto Trait = Cursor.GetTrait<T>(); verifyf(!Cursor.Provide(), TEXT("Two singleton objects detected!")); return Trait; } </code> После этого можете выполнить запрос уникального трейта вот так:<code cpp> auto EnemyBalance = GetSingleton<FGameBalance, FEnemy>(Mechanism); </code> ru/toolworks/docs/apparatus/patterns.txt Последнее изменение: 2022/06/08 21:46 — jispar