Anim Instance Chooser with Struct Output C++

Working more with chooser’s I realised you can have multiple classes as inputs so in case your not sure how to upgrade it:

// Very important to ensure all the struct output matches the chooser output!
	template<class T>
	static TArray<UAnimationAsset*> EvaluateAnimInstanceChooserMulti(TArray<UAnimInstance*> AnimInstances, UChooserTable* ChooserTable,
		T& StructOutput)
	{
		TArray<UAnimationAsset*> ResultAnimations;
		
		if (AnimInstances.IsEmpty() || !IsValid(ChooserTable))
		{
			UE_LOG(LogTemp, Error, TEXT("UInAnimationFunctionLibrary::EvaluateAnimInstanceChooserMulti - Invalid chooser evaluation data"));
			return ResultAnimations;
		}

		const FInstancedStruct ChooserInstance = UChooserFunctionLibrary::MakeEvaluateChooser(ChooserTable);
		FChooserEvaluationContext ChooserEvaluationContext = UChooserFunctionLibrary::MakeChooserEvaluationContext();

		for (UAnimInstance* AnimInstance : AnimInstances)
		{
			if (IsValid(AnimInstance))
			{
				ChooserEvaluationContext.AddObjectParam(AnimInstance);
			}
			else
			{
				UE_LOG(LogTemp, Error, TEXT("UInAnimationFunctionLibrary::EvaluateAnimInstanceChooserMulti - Invalid chooser evaluation anim instance"));
				return ResultAnimations;
			}
		}

		ChooserEvaluationContext.AddStructParam(StructOutput);

		const TArray<UObject*> ChooserObjects {
			UChooserFunctionLibrary::EvaluateObjectChooserBaseMulti(ChooserEvaluationContext, ChooserInstance,
				UAnimationAsset::StaticClass())
		};

		for (UObject* ChooserObject : ChooserObjects)
		{
			if (UAnimationAsset* ChooserAnimation = Cast<UAnimationAsset>(ChooserObject))
			{
				ResultAnimations.Add(ChooserAnimation);
			}
		}

		return ResultAnimations;
	}

*IMPORTANT NOTE: Chooser expects the classes and structs to com in the same order they are in the chooser’s array.