Domanda

Ciò che è media dai delegati in C ++, fa funzione di ordinamento in C / C ++, che prende una funzione di confronto / functor come ultimo parametro è una forma di delegato?

È stato utile?

Soluzione

"delegato" non è in realtà una parte della terminologia C ++. In C # è qualcosa di simile a un puntatore a funzione glorificato in grado di memorizzare l'indirizzo di un oggetto così per richiamare le funzioni membro. Si può certamente scrivere qualcosa di simile in C ++ come una piccola funzione di libreria. O anche più generico:. Combinare boost::bind<> con boost::function<>

In C ++ si usa il termine "funzione di oggetto". Un oggetto funzione è nulla (compresi i puntatori a funzione), che è "callable" tramite l'operatore di chiamata di funzione ().

std :: sorta prende un "predicato", che è un oggetto funzione speciale che non modifica i suoi argomenti e restituisce un valore booleano.

Altri suggerimenti

funzioni callback in C ++ possono essere (vagamente) denominato come forma di delegates (sebbene delegate termine non è usato per questo). Le funzioni di callback utilizzano puntatori a funzioni di passarli come parametri ad altre funzioni. Ma delegati in C # è più avanzato rispetto a funzioni di callback in C ++.

Per delegare il lavoro significa condividere il carico di lavoro con gli altri. Nella vita reale, se si dovesse delegare il vostro compito, vale a dire se sei un manager, si sarebbe condividere il vostro lavoro in attesa gli altri per completare un compito senza dover sapere come.

Il concetto è lo stesso in C ++ e altre lingue che hanno la capacità di delegati. In C si poteva vedere questo come un delegato:

int calculate(int (*func)(int c), int a, int b)

Perché si sono tenuti a inviare un puntatore, a un'altra funzione che calcola un certo lavoro per voi. Recentemente ho scritto un post sul blog sui puntatori a funzione in Python e C, check it out, si potrebbe trovare utile. Questo potrebbe non essere il modo "tradizionale" per delegare il lavoro in C o C ++, ma poi di nuovo, il termonoligy dice che sono un po 'a destra.

delegazione è in gran parte utilizzato come un modo per passare le funzioni alle funzionalità incorporate in una classe (Pimpl, aggregazione, ereditarietà privata). Essi sono principalmente (inline) funzioni di una linea, le funzioni di utente classi chiamando. Per quanto ne so, non ha nulla a che fare con i delegati C 's #.

In questo senso, una funzione puntatore come usato in qsort non è un delegato, ma un callback in cui i moduli quadro possono essere estese dall'utente software come nel Hollywood principio .

delegato : Un oggetto che si comporta come un puntatore multifunzionale con un sistema di abbonamento. Si semplifica davvero l'uso di puntatori statici o funzione membro 'oggetto' per le notifiche di callback e gestione degli eventi.

Questo link spiega delegati in un modo lucido o si può anche fare riferimento al MSDN collegamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top