Есть ли способ вывести значение параметра шаблона указателя на функцию?
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>();
и иметь тип и значение, выводимые из одного упоминания указателя функции.
Надеюсь, теперь это имеет больше смысла.