Delegado.c

Puntos de función abstracta en C
Descargar ahora

Delegado.c Clasificación y resumen

Anuncio publicitario

  • Rating:
  • Licencia:
  • Other/Proprietary Li...
  • Precio:
  • FREE
  • Nombre del editor:
  • William Ahern
  • Sitio web del editor:
  • http://25thandclement.com/~william/projects/

Delegado.c Etiquetas


Delegado.c Descripción

Puntos de función abstracta en c Las bibliotecas de C y los componentes de la aplicación a menudo hacen uso de las devoluciones de llamadas de función a la interfaz con otro código. A veces, la firma requerida de la función de devolución de llamada es molesta y / o introduce la oscuridad y la indirección que, hasta ahora, uno tuvo que sufrir en silencio. El paquete del Delegado.c implementa una especie de puntero de función abstracta al capturar una firma de función (delegado ()) y exponerlo a través de una interfaz simple (invocar ()). Proporciona algo que se aproxima libremente las expresiones lambda; O incluso más delegados análogos, C #. La implementación depende de la introspección de tipo de GCC, y en Libffi. Ambos son ampliamente portátiles. Toda la magia en la macro del delegado () debe ser constante plegada por GCC, incluso en el nivel de optimización 0. El código generado no debe ser más lento que usar directamente Libffi (sin embargo, uno podría hacerlo). El propósito original De este código fue abstraer la API libeventa. La implementación principal es totalmente genérica. Esta implementación genérica se usa para proporcionar un evento_set () / event_add () Wrapper: event_delegate (). Pasar una devolución de llamada típica vacía (*) (int, breve, void *) es detectada estáticamente por EVENT_DELEGATE (). En tal caso, solo el tercer argumento es necesario; Los dos primeros son implícitos. Libffi está totalmente tallada en este caso, lo que presenta ninguna penalización en tiempo de ejecución. Esto es útil para la micro optimización de esas pocas devoluciones de llamada que obtienen todo el tráfico.Usage: / * Simple ejemplo de delegado () e invoque (). * / Struct Delegate del = Delegate_Initializer; Delegado (Del, My_Func, ARG0, Arg1, ...); invocar (DEL); / * Ejecutar salida (exit_success) en Sigterm o después de 60 segundos. * / struct event_delegate event = event_delegate_initializer; int SIG = SIGTERM; EVENTOS CORTOS = EV_SIGNAL | EV_PERSIST; Struct timeval TimeOut = {60, 0}; Event_Delegate (evento, SIG, Eventos, Tiempo de espera, salida, exit_success); event_dispatch (); un La pequeña utilidad de regresión se puede construir a partir de la fuente. Definición de Delegate_Main expondrá la definición principal (). ¿Qué hay de nuevo en este lanzamiento: · Fije el error que continuamente volvería a agregar el evento incluso si ya está pendiente.


Delegado.c Software relacionado