Идея в том, что у нас есть функция-обработчик и 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);*/voidFunc(constTTuple& MyTuple){// Equivalent to:// TTuple TransformedTuple(Overloaded(MyTuple.Get()), Overloaded(MyTuple.Get()), Overloaded(MyTuple.Get())));auto TransformedTuple =TransformTuple(MyTuple, { returnOverloaded(Arg); });}
Полезно когда мы хотим объединить две функции вместе. Передав в виде тупле набор лямбд, мы отправим их в обработчик, который поместит их в другую лямбду-обертку. Которая запустит их уже лишь при определенных условиях.
Есть функция, и несколько Тупле с одинаковым количеством переменных. Функция берет по очереди 1-ый элемент каждого из Тупле, и передает их в функцию. Затем 2-ой элемент каждой Тупле и т.д.
/** * Visits each element in the specified tuples in parallel and applies them as arguments to the functor. * All specified tuples must have the same number of elements. * * @param Func The functor to apply. * @param Tuples The tuples whose elements are to be applied to the functor. * * Example: */voidFunc(constTTuple<int32,constTCHAR*,FString>& Tuple1,constTTuple<bool,float,FName>& Tuple2) { // Equivalent to: // Functor(Tuple1.Get<0>(), Tuple2.Get<0>()); // Functor(Tuple1.Get<1>(), Tuple2.Get<1>()); // Functor(Tuple1.Get<2>(), Tuple2.Get<2>());VisitTupleElements(Functor, Tuple1, Tuple2); }
Не обязательно передавать несколько Тупле. Можно развернуть элементы свертки шаблона (...) через MakeTuple и передать их на посещение. Таким образом мы просто запустим функцию с любым количеством любых типов переменных.