Это объявление шаблонной функции, которая возвращает целое число и принимает в качестве параметров x
и указатель на функцию, которая возвращает x
и принимает в качестве параметра x*
.
Часть x(*)(x*)
- это часть, которая означает «указатель на функцию, которая возвращает x
и принимает в качестве параметра x*
». Первый x
- это тип возвращаемого значения, (*)
указывает, что это указатель на функцию (если у параметра есть имя, оно будет записано x(*argname)(x*)
), а третий x*
- это просто аргумент. .
Вызов это будет выглядеть так:
int f(int* iptr) { return something; }
fun(4, f); // no need for the explicit template parameter because it can be deduced
Или, в более общем смысле,
template<typename x>
x functionname(x* xptr) { return something; }
Это не будет работать в C, потому что, как сказал Даниэль Уайт в комментарии, C не имеет шаблонов.