Domanda

Perché posso fare questo:

stable_sort(it1, it2, binary_function);

, ma non in questo modo:

priority_queue<type, vector<type>, binary_function> pq;

Perché è possibile utilizzare una funzione nel primo caso, ma hanno bisogno di un oggetto nella seconda?

È stato utile?

Soluzione

Se si controlla il riferimento sulla std::stable_sort , si vedrà che la binary_function hai fornito , dovrebbe essere un oggetto funzione così ... non v'è alcuna differenza tra i due, tranne che forse nel secondo caso non c'è proprio "cast" o la conversione fatta da una funzione ad un oggetto il corretto funzionamento.

Credo che questo può essere dovuto al fatto che le funzioni *sort usa il funtore direttamente, ed immediatamente, quindi se l'indirizzo funzione è valida quando viene chiamata la funzione *sort, sarà valido per la durata della chiamata di funzione. Durante la creazione di un contenitore che utilizza questo come un membro di dati (in sostanza), non si può essere sicuri che il riferimento alla funzione diventerà invalidato durante il ciclo di vita dell'oggetto contenitore. Lo so che è una spiegazione handwaving sciolto, ma è il meglio che posso venire con. Forse in C ++ il riferimento ad una funzione binaria viene implicitamente convertito alla costruzione di un std::function modo che la funzione viene "copiato" e non c'è alcun problema di validità.

Spero di non aver perso te ora ...

Altri suggerimenti

priority_queue è un modello e si aspetta un tipo come argomento, dove si binary_function è un oggetto funzione.

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