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.
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 devoid*
aMyMsgType*
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.