Я пытаюсь понять это Функция передана в качестве аргумента шаблона .Оказывается, в некоторых местах, которые я читал о шаблонах, вы объявляете их так:
template <typename MyTypeName>
class ...
Теперь, что точно означает
template <void (*T)(int &)>
?Это больше похоже на вопрос о синтаксисе , чем о том, что делает код.Как я понял, он создает шаблонную функцию, которая принимает указатель на функцию, и эта функция получает ссылку на целое число в качестве аргумента.
Однако я не думаю, что это соответствует синтаксису шаблонов.Где ключевое слово typename
?Каков общий синтаксис шаблона?
Самое близкое, что я нашел, это: Почему мы должны сделать шаблонT вместо просто шаблона T .Очевидно, вы можете определить «постоянные» аргументы шаблона.Поэтому я предполагаю, что синтаксис шаблона таков:
template <arguments>
, где аргументами могут быть вещи типа: typename T
, int N
, void T(int)
и так далее.Если это так, в чем преимущество определения
template <void (*T)(int &)>
void doOperation()
{
int temp=0;
T(temp);
std::cout << "Result is " << temp << std::endl;
}
, например, вместо
void doOperation(void (*T)(int &))
{
int temp=0;
T(temp);
std::cout << "Result is " << temp << std::endl;
}
?