I was learning the history about Lambda's in C++ and saw the following code (which is not lambda) but I am surprised how it Works
struct Printer{
void operator() (int x) const{
std::cout << x << '\n';
}
};
int main(){
std::vector <int> vint;
//doing it the C++ 03 way
vint.push_back(1);
vint.push_back(7);
std::for_each(vint.begin(),vint.end(), Printer());
}
How is the Printer() call in the for_each function working?
Printer() is an instance of the Printer class. It will result in a temporary object of type Printer which is passed to std::for_each.
This is the object on which operator() is called by std::for_each internally.
Without an object of type Printer, it is not possible to call the operator() member function.
Can a class member function be invoked without an object?
If it is a static member function then yes, it can be invoked without instance of the class.
If it is a non-static member function, then no, it can not be invoked without instance of the class. The example operator() function is a non-static member function, so it cannot be called without an instance.
How is the Printer() call in the for_each function working?
Printer() is syntax for value initialisation of a temporary object. The temporary instance of Printer class is passed as an argument into std::for_each.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With