функции, переданной в качестве аргумента шаблона

я ищу правил, включающих в себя прохождение с шаблонами функций в качестве аргументов.

это поддерживается с, как показано на примере здесь:

#include <iostream>void add1(int &v){  v+=1;}void add2(int &v){  v+=2;}template <void (*t)(int &)>void dooperation(){  int temp=0;  t(temp);  std::cout << "result is " << temp << std::endl;}int main(){  dooperation<add1>();  dooperation<add2>();}
googling for "function as a template argument"c++ templates the complete guide

однако узнав об этой технике сложно. не приведет к большому. и классический удивление также не обсуждать (по крайней мере не из моего поиска).

вопросы, которые у меня есть, является ли это допустимым c (или просто широкую поддержку расширений).

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

<strong>не</сильный>

visual c++

следующий работает в вышеуказанной программе, по крайней мере , потому что синтаксис, очевидно, неправильно. было бы неплохо иметь возможность переключать функцию на функтор и наоборот, подобно тому, как можно передать указатель на функцию или функтор к std::алгоритм сортировки, если вы хотите определить пользовательские операции сравнения.

   struct add3 {      void operator() (int &v) {v+=3;}   };...    dooperation<add3>();

указатели на веб-ссылки или страницы в книге шаблоны c будет оценен по достоинству!