Могу ли я сгенерировать функцию без предоставления аргументов? - PullRequest
0 голосов
/ 04 марта 2019

Итак имеет std::function Руководства по удержанию так дано:

int foo();

Я могу сделать:

std::function bar(foo);

Но я застрял на компиляторе .Там я должен сделать что-то более похожее на: function<int()> bar(foo).Мне было интересно, есть ли способ создать std::function без передачи указателя функции и , явно предоставив сигнатуру функции?Так, например, make_pair выведет тип своего возврата из своих аргументов.Мне было интересно, смогу ли я написать что-нибудь подобное для function s, даже используя , например:

auto bar = make_function(foo);

Это выполнимо?

Примечание: мой реальный случай заключается в том, что foo - это функция шаблона с большим количеством аргументов, которые я не хочу выводить.Таким образом, моя мотивация здесь состоит в том, чтобы сгенерировать function без без необходимости указывать типы параметров.

Live Example

1 Ответ

0 голосов
/ 04 марта 2019

Ваш вопрос имеет в конце самую важную часть мелким шрифтом.Если ваш 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>);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...