#include <iostream>
struct Functor {
Functor(int a, int b, int & c) :
captured_a(a),
captured_b(b),
captured_c(c)
{
}
int operator()(int arg1, int arg2)
{
captured_c = arg1 * arg2;
return captured_a + captured_b + arg1 + arg2;
}
private:
int captured_a;
int captured_b;
int & captured_c;
};
int main()
{
int a = 5,
b = 10,
c = 15;
Functor f(a, b, c);
std::cout << "f(3, 4) == " << f(7, 8) << std::endl;
std::cout << "c == " << c << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEZ1bmN0b3IgewogICAgRnVuY3RvcihpbnQgYSwgaW50IGIsIGludCAmIGMpIDoKICAgICAgICBjYXB0dXJlZF9hKGEpLAogICAgICAgIGNhcHR1cmVkX2IoYiksCiAgICAgICAgY2FwdHVyZWRfYyhjKQogICAgewogICAgfQoKICAgIGludCBvcGVyYXRvcigpKGludCBhcmcxLCBpbnQgYXJnMikKICAgIHsKICAgICAgICBjYXB0dXJlZF9jID0gYXJnMSAqIGFyZzI7CiAgICAgICAgcmV0dXJuIGNhcHR1cmVkX2EgKyBjYXB0dXJlZF9iICsgYXJnMSArIGFyZzI7CiAgICB9Cgpwcml2YXRlOgogICAgaW50IGNhcHR1cmVkX2E7CiAgICBpbnQgY2FwdHVyZWRfYjsKICAgIGludCAmIGNhcHR1cmVkX2M7Cn07CgppbnQgbWFpbigpCnsKICAgIGludCBhID0gNSwKICAgICAgICBiID0gMTAsCiAgICAgICAgYyA9IDE1OwogICAgRnVuY3RvciBmKGEsIGIsIGMpOwoKICAgIHN0ZDo6Y291dCA8PCAiZigzLCA0KSA9PSAiIDw8IGYoNywgOCkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJjID09ICIgPDwgYyA8PCBzdGQ6OmVuZGw7CgogICAgcmV0dXJuIDA7Cn0K