Допустим, у вас есть класс объекта функции, Func
, с определением operator()
. Если у вас есть экземпляр этого класса, вы можете просто поместить скобки после выражения, ссылающегося на этот экземпляр:
Func myFunc;
myFunc(); // Calls the operator() member function
В качестве примера из стандартной библиотеки мы можем посмотреть на std::less
, который является двоичным объектом функции:
std::less<int> myLess; // Create an instance of the function object
std::cout << myLess(5, 6) << std::endl; // Is 5 less than 6?
Другое распространенное использование для operator()
- при создании класса Matrix. Вы можете определить T& Matrix::operator()(int,int)
для извлечения элемента из матрицы, например myMatrix(1,2)
.
Число параметров, которые может принимать operator()
, такое же, как и у любой другой функции. Это зависит от реализации, хотя. Рекомендуемое минимальное количество аргументов, которое ваша реализация должна допускать, равно 256 (приведено в Приложении B стандарта).
Подстановка
operator()
определяется в стандарте (ISO / IEC 14882: 2003 и раздел; 13.3.1.1.2) следующим образом:
Если первичное выражение E
в синтаксисе вызова функции оценивается как объект класса типа "cv T
", то набор функций-кандидатов включает, по крайней мере, операторы вызова функции из T
. Операторы вызова функции T
получены обычным поиском имени operator()
в контексте (E).operator()
.
Перевод: если вы выполняете вызов функции с использованием синтаксиса expression()
и выражение перед круглыми скобками оценивает экземпляр класса, то добавьте функцию-член operator()
к списку функций-кандидатов, которые могут быть вызваны .