Основные паттерны

Синглтон

Иногда вам надо получить инициализированную ссылку на конкретную Сущность, которая представляет собой глобальную комбинацию трейтов. Этого можно достичь через такой паттерн, как синглтон, который применяется в классическом ООП подходе.

Вы можете полностью достичь этого с помощью простого метода:

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;
}

После этого можете выполнить запрос уникального трейта вот так:

auto EnemyBalance = GetSingleton<FGameBalance, FEnemy>(Mechanism);