Оператор вызова функции
Возможные дубликаты:
Функторы С ++ - и их использование.
Зачем переопределять оператор ()?
Я видел использование operator()
на контейнерах STL, но что это и когда вы используете?
2 ответа
Этот оператор превращает ваш объект в функтор. Вот хороший пример того, как это делается.
Следующий пример демонстрирует, как реализовать класс для использования его в качестве функтора:
#include <iostream>
struct Multiply
{
double operator()( const double v1, const double v2 ) const
{
return v1 * v2;
}
};
int main ()
{
const double v1 = 3.3;
const double v2 = 2.0;
Multiply m;
std::cout << v1 << " * " << v2 << " = "
<< m( v1, v2 )
<< std::endl;
}
Это делает объект "вызываемым" как функция. В отличие от функции, объект может содержать состояние. На самом деле функция может делать это в слабом смысле, используя статический локальный, но тогда этот статический локальный постоянно присутствует для любого вызова этой функции, сделанного в любом контексте любым потоком.
С объектом, действующим как функция, состояние является членом только этого объекта, и вы можете иметь другие объекты того же класса, которые имеют свой собственный набор переменных-членов.
Вся Boost:: Bind (которая была основана на старых STL-связывателей) основана на этой концепции.
Функция имеет фиксированную подпись, но часто для выполнения действия требуется больше параметров, чем фактически передается в подписи.