Qual è la differenza tra Boost :: bind e Boost Phoenix :: bind?Qual è la differenza tra Boost :: bind e Boost Phoenix :: bind?
12
A
risposta
15
phoenix::bind
è una funzione che restituisce un modello di espressione che registra che deve chiamare la funzione data. Questi sono progettati per funzionare insieme con phoenix e lambda, rispettivamente. Di conseguenza, contengono molte più cose. Come, il tipo che restituiscono sovraccarica tutti i possibili operatori in modo che la loro rispettiva azione possa essere registrata ed eseguita successivamente.
boost::bind
è "solo" un raccoglitore. Legherà la funzione e restituirà un tipo con sovraccarico la funzione chiamata operatore, e non molto altro.
Vale la pena notare che in [Phoenix 3.0] (http://www.boost.org/doc/libs/1_47_0/libs/phoenix/doc/html/index.html) (rilasciato in boost 1.47), 'phoenix :: bind' è [compatibile] (http://www.boost.org/doc/libs/1_47_0/libs/phoenix/doc/html/phoenix/modules/bind/compatibility_with_boost_bind.html) con 'boost :: bind' . Tenendo presente la risposta di litb qui, questo significa che potresti usare 'phoenix :: bind' in posti in cui hai usato in precedenza' boost :: bind', ma non penso che funzioni in senso inverso (non puoi usare 'boost :: bind' all'interno di un lambda e si aspetta che funzioni come' phoenix :: bind'). –