Имеется такой класс для, например, вывода вектора через библиотеку algorithm.
Объясните по какому принципу myobject работает в коде и что это вообще такое?
struct myclass {
void operator() (int i) {std::cout << ' ' << i;}
} myobject;
for_each (myvector.begin(), myvector.end(), myobject);
Ответ
Шаблонная функция std::for_each внутри себя пробегает в цикле по всему диапазону итераторов, который вы ей передали: от myvector.begin() до myvector.end() и для каждого итератора it в этом диапазоне выполняет следующее выражение
myobject(*it)
Компилятор видит, что myobject - это не функция, а экземпляр некоего класса myclass. В такой ситуации компилятор расценивает выражение myobject(*it) как вызов
myobject.operator()(*it)
А это и есть вызов вашего метода класса с аргументом *it, т.е. с очередным значением из вектора.
Комментариев нет:
Отправить комментарий