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?