Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

boost::unction + boost::bind: nejasan deo funkcionalnosti

[es] :: C/C++ programiranje :: boost::unction + boost::bind: nejasan deo funkcionalnosti

[ Pregleda: 1379 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
95.180.11.*

ICQ: 208550327


+14 Profil

icon boost::unction + boost::bind: nejasan deo funkcionalnosti26.05.2016. u 18:15 - pre 44 meseci
Prilicno mi je jasno kako rade spomenute funkcionalnosti boost lib-a i njihova medjusobna saradnja ali ce me mozda sledece pitanje demantovati :)
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();
}



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);



Ovo mi je jasno ali verzija sa bind nije.


EOF
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1905
*.allheartnews.com.

Sajt: stackoverflow.com/users/1..


+471 Profil

icon Re: boost::unction + boost::bind: nejasan deo funkcionalnosti26.05.2016. u 20:35 - pre 44 meseci
To je samo `operator!` primenjen na rezultat `boost::bind`, pa se takav veže za `func`:

Code:

struct logical_not
{
    template<class V> bool operator()(V const & v) const { return !v; }
};

template<class R, class F, class L>
    bind_t< bool, logical_not, list1< bind_t<R, F, L> > >
    operator! (bind_t<R, F, L> const & f)
{
    typedef list1< bind_t<R, F, L> > list_type;
    return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );
}



http://www.boost.org/doc/libs/1_49_0/boost/bind/bind.hpp
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
95.180.11.*

ICQ: 208550327


+14 Profil

icon Re: boost::unction + boost::bind: nejasan deo funkcionalnosti26.05.2016. u 20:59 - pre 44 meseci
To je samo `operator!`

Da da... hvala!
EOF
 
Odgovor na temu

[es] :: C/C++ programiranje :: boost::unction + boost::bind: nejasan deo funkcionalnosti

[ Pregleda: 1379 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.