В чем разница между использованием функторов и указателями функций. Напримерфункция указатель против функторов в C++
//Functor
struct add_x
{
int x;
add_x(int y):x(y){}
int operator()(int y)
{
return x+y;
}
};
//Function
int (func)(int x)
{
return ++x;
}
std::vector<int> vec();
//fill vec with 1 2 3 4 5
int (*f)(int) = func;//Function pointer
std::transform(vec.begin(),vec.end(),f); //approach 1
std::transform(vec.begin(),vec.end(),add_x(1)); //approach 2
Оба подхода работают, но я уверен, что будет иметь место случаи, когда один является предпочтительным (или возможно) над другими.
В вашем примере вы можете заменить 'add_x (1)' на 'add_x (2)'. Чтобы получить такое же изменение с помощью указателя на функцию, вам придется изменить эту функцию. –
, как указано в [ответе на этот вопрос] (http://stackoverflow.com/questions/356950/c-functors-and-their-uses), функторы могут содержать состояние. Например, вы можете написать функтор, который возвращает x + 1 при первом вызове, x + 2 второй раз и т. Д. Конечно, вы можете добиться того же, используя функцию bind, чтобы позволить компилятору превратить функцию с двумя аргументами в функтор с одним аргументом и внешним состоянием. –
Возможный дубликат [Зачем использовать функторы над функциями?] (Https://stackoverflow.com/questions/6451866/why-use-functors-over-functions) – user463035818