Функция передана как аргумент шаблона
Я ищу правила передачи функций шаблонов C ++ в качестве аргументов.
Это поддерживается C ++, как показано на примере здесь:
#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>();
}
Однако узнать об этой технике сложно.Поиск в Google в качестве аргумента шаблона & quot; не приводит к многим. И классическийШаблоны C ++ Полное руководство на удивление, также не обсуждает это (по крайней мере, не из моих поисков).
У меня есть вопросы, является ли это допустимым C ++ (или просто некоторым широко поддерживаемым расширением).
Кроме того, есть ли способ позволить функтору с одинаковой сигнатурой взаимозаменяемо использоваться с явными функциями во время такого вызова шаблона?
Следующее делаетnot работать в вышеуказанной программе, по крайней мере, вVisual C ++потому что синтаксис явно неправильный. Было бы хорошо иметь возможность переключать функцию для функтора и наоборот, аналогично тому, как вы можете передавать указатель функции или функтор в алгоритм std :: sort, если вы хотите определить пользовательскую операцию сравнения.
struct add3 {
void operator() (int &v) {v+=3;}
};
...
doOperation<add3>();
Будем признательны за указатели на одну или две веб-ссылки или страницу в книге шаблонов C ++!