Есть ли способ вывести значение параметра шаблона указателя на функцию?

C ++ позволяет указывать нетипизированные параметры шаблона, включая указатель функции, тип. Я недавно спросилвопрос о том, для чего это полезно, и это продолжениеодин из ответов.

Можно ли вывестистоимость параметра шаблона указателя на функцию, из аргумента функции, о котором идет речь? Например:

using VoidFunction = void(*)();

template <VoidFunction F>
void templ(VoidFunction);

...

void func();  // a VoidFunction

...

templ<func>(func);  // works, but I have to specify the template parameter explicitly
templ(func);        //  <-- I would like to be able to do this

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

Если вас интересует мотивация, посмотрите комментарии подэтот ответ, в частности, возможная оптимизация для реализацииstd::bind().

РЕДАКТИРОВАТЬ: Я понимаю, что могу просто удалить аргумент функции и использовать аргумент шаблона, как вtempl<func>(), Моя единственная цель добавления в аргумент функции - попытаться избежать передачи аргумента шаблона.

Я думаю, что я действительно хочу, это также вывеститип указателя функции, как в:

template <typename Function, Function F>
void templ(/* something */);

и тогда сможет позвонить

templ(func);

или же

templ<func>();

и иметь тип и значение, выводимые из одного упоминания указателя функции.

Надеюсь, теперь это имеет больше смысла.

Ответы на вопрос(1)

Ваш ответ на вопрос