C ++ передача аргументов функции в другую лямбду

У меня есть куча шаблонного кода в отношении моих лямбд. вот сырая

На данный момент давайте предположим, что myClass выглядит так:

class myClass
{
public:
std::function<void(int,int)> event;
std::function<void(std::string)> otherEvent;
<many more std::function's with different types>
}

С его лямбдами, назначенными во время выполнения как таковые:

myClass->event =[](T something,T something2,T something3)
{
yetAnotherFunction(something,something,something3);
//do something else.
}

Как я хочу, чтобы это выглядело так:

void attachFunction(T& source, T yetAnotherFunction)
{
source = [](...)
{
yetAnotherFunction(...);
//do something else.
}
}

так что я могу назвать что-то вроде этого:

attachFunction(myClass->event,[](int a,int b){});

а также

attachFunction(myClass->otherEvent,[](std::string something){});

Я просто хочу передать параметры и убедиться, что они совпадают.

Как мне обернуть это в функцию, предполагая, что у меня будет неопределенное количество параметров и разных типов?

Спасибо!

0

Решение

Мне удалось решить это. Это мое решение:

template <typename R, typename... Args>
void attachEvent(std::function<R(Args...)>& original,std::function<R(Args...)> additional)
{
original = [additional](Args... args)
{
additional(args...);
std::cout << "Attached event!" << std::endl;
};
}

Оригинальная функция расширена дополнительными, она стирает предыдущую функциональность с оригинальной лямбды.

Вот пример использования:

  std::function<void(float,float,float)> fn = [](float a ,float b,float c){};
std::function<void(float,float,float)> additional = [](float a,float b,float c){std::cout << a << b << c << std::endl;};

attachEvent(fn,additional);
fn(2.0f,1.0f,2.0f);

Который должен печататься в последовательности:

212

Прикрепленное событие!

0

Другие решения

Других решений пока нет …