Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

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

  • 2 odgovora
  • 2.811 pregleda

Najnovija ↓

boost::unction + boost::bind: nejasan deo funkcionalnosti 26.05.2016. u 19:15 · pre 127 meseci #1
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.

Potpis
EOF
Re: boost::unction + boost::bind: nejasan deo funkcionalnosti 26.05.2016. u 21:35 · pre 127 meseci #2
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme