> For the complete documentation index, see [llms.txt](https://nexon3333.gitbook.io/gga/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nexon3333.gitbook.io/gga/shablon-funkciya-dlya-zapuska-lyambdy-po-klassu.md).

# Шаблон-функция для запуска лямбды по классу

Старая версия

```cpp
	
bool CheckClass(UObject* Object, UClass* TestClass)
{
	bool bReturn = Object->GetClass() == TestClass || Object->GetClass()->IsChildOf(TestClass);
	return bReturn;
}

		
template<class... ClassType, class... OperationType>
void DoByClass(UObject*& Obj, OperationType&&... Operations)
{
	auto CheckAndDo = [&](auto&& CastedObj, auto&& InOperationType) {
		check(CastedObj);
		InOperationType(CastedObj);
		return true;
	};
	[](auto&&...) {}((CheckClass(Obj, ClassType::StaticClass()) ? CheckAndDo(Cast<ClassType>(Obj), Operations) : nullptr, nullptr)...);
}
		
		DoByClass<AActor, UBlueprint, UStaticMesh>(
		    CashedObj,
		    [&](auto ObjCasted) {
			    auto NewActor = GetWorld()->SpawnActor<AActor>(ObjCasted->GetClass());
			    VisualActor = NewVisualComponent;
		    },
		    [&](auto ObjCasted) {
			    CashedObj = ObjCasted->GeneratedClass->GetDefaultObject<AActor>();
		    },
		    [&](auto ObjCasted) {
			    auto NewActor = GetWorld()->SpawnActor<UStaticMeshComponent>();
			    NewActor->SetStaticMesh(ObjCasted);
			    NewActor->Collisio
			        VisualActor
			        = NewVisualComponent;
		    });
```
