Ваш вопрос имеет в конце самую важную часть мелким шрифтом.Если ваш foo
является шаблоном, руководства по выводам C ++ 17 не помогут вам с простым синтаксисом, таким как
std::function f(foo);
. Вам все равно нужно будет предоставить аргументы шаблона для foo
.Предполагая, что вы в порядке с указанием foo
типов аргументов (как и должно быть), написание make_func является тривиальным упражнением:
template<class R, class... ARGS>
auto make_func(R (*ptr)(ARGS...)) {
return std::function<R (*)(ARGS...)>(ptr);
}
И чем вы его используете:
auto bar = make_func(&foo<Z, Y, Z>);