Pregunta

¿Por qué puedo hacer esto:

stable_sort(it1, it2, binary_function);

pero no esto:

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

¿Por qué puedo utilizar una función en el primer caso, pero necesitan un objeto en el segundo?

¿Fue útil?

Solución

Si usted echa un vistazo a la referencia en std::stable_sort , verá que el binary_function le ha proporcionado , debe ser un objeto de la función, así ... no hay ninguna diferencia entre los dos, excepto que tal vez en el segundo caso no hay un "molde" adecuada o la conversión a partir de una función a un objeto de función apropiada.

Creo que esto puede ser debido al hecho de que las funciones *sort utilizan el funtor directamente, e inmediatamente, por lo tanto, si la dirección de la función es válida cuando la función se llama *sort, será válido para la duración de la llamada a la función. Al crear un contenedor que utiliza esto como un miembro de datos (en esencia), no se puede estar seguro de la referencia de la función será invalidado durante el tiempo de vida del objeto contenedor. Sé que es una explicación handwaving flojo, pero es lo mejor que puedo llegar a. Quizá en C ++ la referencia a una función binaria se convertirá implícitamente a la construcción de un std::function de modo que la función se "copia" y no hay ningún problema de validez.

Espero que no he perdido ahora ...

Otros consejos

priority_queue es una plantilla y que espera un tipo como un argumento, donde se binary_function es un objeto de función.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top