Что делает перегрузка оператора скобок? - PullRequest
0 голосов
/ 11 октября 2019

Я вижу это очень часто, и мне интересно, что он делает / его цель.

  1. Что делает перегрузка operator ()?
  2. Почему люди обычно перегружают этот оператор?

Пример

std::vector<double> operator()(int seed) const;

Спасибо!

1 Ответ

6 голосов
/ 11 октября 2019

Функторы и матричная индексация , насколько мне известно, наиболее распространенные случаи использования.

Матричная индексация
Для матричного класса вы можете сделатьчто-то вроде этого:

Matrix3x3 A;
A(1,2) = 2;

Основная причина использования скобок вместо скобок в этом случае заключается в том, что оператор скобок принимает только один аргумент, а оператор скобок принимает несколько аргументов.

Функтор
Если вы хотите, чтобы объект действовал как функция, которая также может хранить информацию, вы можете сделать:

Accumulator accumulate;
for(int i=0; i<20; ++i)
    accumulate(i);
std::cout << accumulate.sum << std::endl;

В C ++ вы также часто встречаете функторы для объекты сравнения , даже если они не хранят информацию.

...