polimorfismo en c y tampones
-
28-09-2019 - |
Pregunta
Tengo esta unión:
typedef union Message
{
message_base base;
message_with_parameters parameters;
reply_message reply;
buffer_t *buffer; // can't figure out what to put here
} message;
message_with_parameters
tiene un message_base
como el primer campo y reply_message
tiene un message_with_parameters
como como el primer campo que a su vez tiene como message_base
como el primer campo.
Así que, básicamente, puedo acceder a cualquiera de ellos y yo todavía obtener toda la necesidad de datos que, sin embargo estoy recibiendo un buffer de mi conductor y ahora quiero serializar en el mensaje.
Ya sé que el puntero a la memoria intermedia está mal como lo hará no se correlacionan con mis estructuras, pero no puedo tener un buffer de tamaño fijo.
En algún lugar a lo largo de la manera que quiero hacer esto:
m->buffer = buff->payload;
Y no importa qué tipo de datos de tipo I tienen, éste seguirá serializar.
¿Cómo puede hacerse esto?
EDIT:
Aquí están mis estructuras:
typedef struct MessageBase
{
uint32_t u32DeviceID;
uint32_t u32CoreID;
uint16_t u16Class;
uint16_t u16CRC;
uint8_t u8OpCode;
void (*states [MAX_OPCODES]) (void *);
} message_base;
typedef struct MessageWithParameters
{
message_base base_class;
uint8_t u8Param1;
uint8_t u8Param2;
} message_with_parameters;
typedef message_with_parameters reply_message;
typedef union Message
{
message_base base;
message_with_parameters parameters;
reply_message reply;
} message;
Solución
es porque los datos en el búfer no es parte de la unión.
buffer_t * buffer es un puntero, por lo que el puntero es parte de la unión, no a los datos de las que apunta a
probablly desea hacer algo como
m = (message*) buff->payload;