Лучшим способом было бы объединить типы (если возможно!) В общий тип, такой как:
typedef enum {
t_origin,
t_session
} type_t;
struct base_t {
type_t type;
union {
origin_t origin;
session_t session;
};
}
, а затем:
const char* get_value(base_t *obj)
{
/* Cast to the correct structure type */
if(obj->type == t_origin) {
/* Is a origin structure */
origin_t *origin = &obj->origin;
}
else if(obj->type == t_session) {
/* Is a session structure */
session_t *session = &obj->session;
}
}
Нет способовопределение типов по указателю в C. Вы должны добавить свой собственный механизм типов.Это один из способов сделать это без вмешательства в подтипы (origin_t и session_t).Вам также не нужно делать странные приведения и ставить под угрозу и без того слабую систему типов в языке C.