Question

Pourquoi puis-je faire ceci:

stable_sort(it1, it2, binary_function);

mais pas ceci:

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

Pourquoi puis-je utiliser une fonction dans le premier cas, mais besoin d'un objet dans la seconde?

Était-ce utile?

La solution

Si vous cochez la référence std::stable_sort , vous verrez que le binary_function vous a fourni , devrait être un objet fonction aussi bien ... Il n'y a pas de différence entre les deux, sauf que peut-être dans le second cas il n'y a pas bon « cast » ou la conversion faite à partir d'une fonction à un objet de fonctionnement.

Je crois que cela peut être dû au fait que les fonctions de *sort utilisent foncteur directement et immédiatement, donc si l'adresse de fonction est valide lorsque la fonction *sort est appelée, elle sera valable pour la durée de l'appel de fonction. Lors de la création d'un conteneur qui utilise en tant que membre de données (en substance), vous ne pouvez pas être sûr que la référence de fonction sera invalidée au cours de la durée de vie de l'objet conteneur. Je sais qu'il est un lâche explicitation argument qualitatif, mais il est le meilleur que je peux trouver. Peut-être en C ++ la référence à une fonction binaire sera convertie à la construction implicitement d'un std::function pour que la fonction est « copié » et il n'y a pas de problème de validité.

J'espère que je ne vous ai pas perdu maintenant ...

Autres conseils

priority_queue est un modèle et il attend un type d'argument, où est binary_function est un objet de fonction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top