вы не можете добиться этого с помощью процедурного подхода
Мне нужна одна структура Vector, которая будет работать и с комплексными, и с вещественными числами.
union node {
struct complex c;
float f;
double d;
int i;
};
struct vector {
int type; // тут идентификатор реального типа данных лежащих в объединениях ниже
union node x;
union node y;
}
Я бы не стал воспринимать это как еще один уровень защиты. Считайте это приятным побочным эффектом. Не стоит из-за этого делать какие-то ослабления в отношении других методов защиты.