Я хочу создать метод convert
, который принимает общую функцию bar
(может быть std::function
, lambda
, functor
, ...) и преобразует его в std::function<double(std::array<double, 3>)>
.Функция bar
может быть:
- функция, принимающая
std::array<double, 3>
в качестве аргумента и возвращающая double
.В этом случае convert
написать не сложно:
код:
template<typename F>
std::function<double(std::array<double, 3>)> convert (F& bar)
{
std::function<double(std::array<double,3>)> bar_converted = bar;
return bar_converted;
}
- функция, принимающая три отдельных
doubles
в качестве аргумента и возвращающаяdouble
.Также в этом случае convert
не так уж сложно написать:
код:
template<typename F>
std::function<double(std::array<double, 3>)> convert(F& bar)
{
std::function<double(std::array<double,3>)> bar_converted;
auto array_bar = [bar]( std::array<double, 3> x)->double{ return bar(x[0], x[1], x[2]); };
bar_converted = array_bar;
return bar_converted;
}
Проблема в том, что я не имею понятия, как объединить эти дваconvert
методов, или это вообще возможно?