Pregunta

¿Qué es la media de los delegados en C ++, hace función de clasificación en C / C ++ que tiene una función de comparación / funtor como último parámetro es una forma de delegado?

¿Fue útil?

Solución

"delegado" no es realmente una parte de la terminología de C ++. En C # es algo así como un puntero de función glorificado que puede almacenar la dirección de un objeto, así invocar funciones miembro. Por supuesto que puede escribir algo como esto en C ++ como una pequeña operación de biblioteca. O incluso más genérico:. Combinar boost::bind<> con boost::function<>

En C ++ que utiliza el término "objeto de función". Un objeto de función es cualquier cosa (incluyendo los punteros de función) que es "exigible" a través del operador llamada a la función ().

std :: sort toma una "predicado", que es un objeto de función especial que no modifica sus argumentos y devuelve un valor booleano.

Otros consejos

funciones de devolución de llamada en C ++ pueden ser (libremente) se hace referencia como una forma de delegates (aunque término delegate no se utiliza para esto). Las funciones de devolución de llamada utilizan punteros a funciones para pasarlos como parámetros a otras funciones. Pero los delegados en C # es más avanzada en comparación con las funciones de devolución de llamada en C ++.

Para delegar el trabajo significa compartir la carga de trabajo con otros. En la vida real, si tuviera que delegar su tarea, es decir, si usted es un gerente, que estaría compartiendo su trabajo esperando que otros para completar una tarea sin tener que saber cómo.

El concepto es el mismo en C ++ y otros lenguajes que tienen la capacidad de delegados. En C se podía ver esto como un delegado:

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

Debido a que se espera para enviar un puntero, a otra función que calcular un trabajo para usted. Hace poco escribí un entrada de blog de punteros de función en Python y C, comprobar que funciona, puede que le resulte servicial. Esto podría no ser la manera "tradicional" para delegar el trabajo en C o C ++, pero por otra parte, la termonoligy dice que soy un poco a la derecha.

Delegación se utiliza principalmente como una manera de pasar funciones a funcionalidad incrustados en una clase (pimpl, agregación, herencia privada). Están principalmente (en línea) las funciones de una línea, llamar a las funciones de miembros de la clase. Por lo que yo sé, no tiene nada que ver con los delegados de C # 's.

En este sentido, una función de puntero tal como se utiliza en qsort no es un delegado, pero una devolución de llamada en el que los módulos de marco se pueden extender por el usuario en software como en el Hollywood principio .

Delegado : Un objeto que actúa como un puntero multifunción con un sistema de suscripción. Realmente simplifica el uso de punteros de función estáticas o miembro de 'objeto' para las notificaciones de devolución de llamada y gestión de eventos.

Este enlace explica delegados en una manera lúcida o también puede referirse a la MSDN enlace.

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