Это не имя функции, это объект функции (функтор).
Вы можете сделать это вручную, определив класс с подходящей реализацией operator()
, или обернуть функцию как функтор, используя Boost.Function или аналогичный.
Обратите внимание, что здесь есть небольшая проблема.Если вы определите свой operator()
как здесь, код работает, но не может быть использован для обновления векторных элементов.Если вы хотите обновить на месте, вам нужно определить вместо этого (например):
void operator() (int& i) { i *= 2; }
Это более типичный способ определения функторов - аргументы передаются по ссылке, а не по значению.