TTuple: использование в шаблонах

Основные функции для работы

Создается TTuple

template<class... OperationTypes>
	void Run(OperationTypes&&... Operations)
	{
		MakeTuple(MoveTemp(Operations)...);
	}

Трансформирование TTuple

Идея в том, что у нас есть функция-обработчик и TTuple с набором переменных. Обработчику передается поочереди каждая переменная (из TTuple) одного типа, на что обработчик может вернуть переменную абсолютно другого типа. Таким образом сделав новую TTuple, совершенно с другим набором параметров и их значений.

/**
Creates a new TTuple by applying a functor to each of the elements.
*
@param  Tuple  The tuple to apply the functor to.
@param  Func   The functor to apply.
*
@return A new tuple of the transformed elements.
*
Example:
*
float        Overloaded(int32 Arg);
char         Overloaded(const TCHAR* Arg);
const TCHAR* Overloaded(const FString& Arg);
*/
void Func(const TTuple& MyTuple)
{
// Equivalent to:
// TTuple TransformedTuple(Overloaded(MyTuple.Get()), Overloaded(MyTuple.Get()), Overloaded(MyTuple.Get())));
auto TransformedTuple = TransformTuple(MyTuple,  { return Overloaded(Arg); });
}

Полезно когда мы хотим объединить две функции вместе. Передав в виде тупле набор лямбд, мы отправим их в обработчик, который поместит их в другую лямбду-обертку. Которая запустит их уже лишь при определенных условиях.

Посещение элементов TTuple

Есть функция, и несколько Тупле с одинаковым количеством переменных. Функция берет по очереди 1-ый элемент каждого из Тупле, и передает их в функцию. Затем 2-ой элемент каждой Тупле и т.д.

Не обязательно передавать несколько Тупле. Можно развернуть элементы свертки шаблона (...) через MakeTuple и передать их на посещение. Таким образом мы просто запустим функцию с любым количеством любых типов переменных.

Last updated

Was this helpful?