es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Implementación de una función virtual pura. Cambiar el parámetro de tipo void* a un puntero de tipo específico.

Tengo una Clase base que implementa todas las cosas mundanas para crear un servidor que crea un hilo, escucha en una cola y procesa los mensajes recibidos.
Estos mensajes luego se pasan a una función virtual pura:

void ProcMsg(void* msg) = 0;

En la implementación de la Clase derivada al implementar ProcMsg, me gustaría cambiar void* msg a un puntero a una definición de estructura de mensaje específica, MyMsgType* msg. ¿Existe alguna construcción del lenguaje que me permita hacer eso o la única forma es volver a convertir void* a MyMsgType* dentro de la implementación de ProcMsg?
Lo único que encontré son las plantillas, pero esperaba que hubiera una forma más simple.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en C++, pasaje de parámetros y funciones puramente virtuales, sugeriría que la mejor manera de lograr lo que estás buscando es volver a convertir el puntero void a la estructura de mensaje específica dentro de la implementación de la función ProcMsg. No existe una construcción del lenguaje que te permita cambiar el tipo del parámetro de la función de void* a MyMsgType* en la implementación de la clase derivada y, al mismo tiempo, cumplir con el atributo pure-virtual de la clase base.

    Podrías utilizar templates para lograr esto, pero esto requeriría cambiar el parámetro del template en la clase base y actualizar todas las clases derivadas para usar el nuevo parámetro del template, lo cual podría resultar bastante engorroso. Sería más fácil y menos propenso a errores simplemente convertir el puntero void a tu estructura de mensaje específica dentro de la implementación de la función ProcMsg en la clase derivada.

    En general, es importante considerar cuidadosamente tus decisiones de diseño al utilizar C++. Si bien puede haber muchas formas de lograr un objetivo en particular, algunos métodos pueden ser más efectivos y mantenibles que otros.

Comments are closed.