У меня этот код унаследован от старого времени C ++ с использованием макросов. В настоящее время я заменяю его, и я нахожусь в точке, где необходимо учитывать некоторые конструкции.
Как правило, у меня есть это:
if(condition)
{
fun1(fun2(arguments, arg1)); // let's say arg1 is a vector of doubles
}
else
{
fun1(fun2(arguments, arg2)); // let's say arg2 is a double
}
несколько раз. fun1()
имеет различный набор аргументов в зависимости от fun2()
типов аргументов, и я мог бы также иметь там arg1
и arg2
(истинный код на самом деле имеет несколько слоев if
с, каждый раз с другим набором типов, несколько дополнительных слоев функций внутри каждой ветви).
Я бы хотел выделить это в функцию, которая может принимать лямбда-шаблон, например:
[&](auto arg) { fun1(fun2(arguments, arg));}
Теперь проблема в том, что это шаблонно, поэтому я не могу превратить его в std::function
, поэтому я не знаю, какой аргумент мне следует использовать для создания моей функции:
void dispatch(bool condition, const std::vector<double>& arg1, double arg2, ???? lambda)
{
if(condition)
{
lambda(arg1);
}
else
{
lambda(arg2);
}
}
Есть ли такая опция в C ++ 17? или даже C ++ 20?