Лучший способ справиться с различными потребностями типов данных в одном и том же типе структуры - сделать что-то вроде этого:
struct s_my_struct
{
void *data;
char data_type;
}
с:
#define DATA_TYPE_LONGLONGP 'm'
#define DATA_TYPE_CHARP 's'
и использовать вот так:
if (mystruct.data_type == DATA_TYPE_CHARP)
{
// use of ((char*)mystruct.data)
}
else if (mystruct.data_type == DATA_TYPE_LONGLONG)
{
// use of ((long long*)mystruct.data)
}
Будьте осторожны, так как вы всегда должны использовать указатель, а не плоские типы, потому что структура хранит данные размера указателя.