Naidjoh skoro na parcence koda koje izgleda slicno sledecem:
Code:
bool getState()
{
return true;
}
void main()
{
boost::function<bool()> func = !boost::bind(getState);
std::cout << func();
}
bool getState()
{
return true;
}
void main()
{
boost::function<bool()> func = !boost::bind(getState);
std::cout << func();
}
Impresivno (bar za mene) rezultat je false.
Nije mi jasno kako boost::function uspeva da capture-uje i operator ! kada smesta funktor generisan binderom za delayed call.
Bilo bi mi jasno da se koristi funkc. kompozicija sa std::not1 npr ali za ovo nisam nasao objasnjenje kako funkcionise.
Razmisljao sam i o analogiji sa smestanjem lambda expressiona u boost::function...
Na primer:
Code:
boost::function<bool(bool)> func = !_1;
std::cout << func(true);
boost::function<bool(bool)> func = !_1;
std::cout << func(true);
Ovo mi je jasno ali verzija sa bind nije.
EOF