I cast in C vengono definiti
unicamente a compile time, sono statici e assolutamente non manipolabili a runtime.
Per ovviare a questa limitazione C++ ha introdotto i new cast e RTTI, una delle features maggiormente deprecate dal punto di vista prestazionale ed escluse senza mezzi termini da suo
cuggino ad alte prestazioni Embedded C++.
Questo implica che la domanda non ammette risposta entro le caratteristiche standard del linguaggio C.
D'altro canto, nessun programmatore C penserebbe
jamais di utilizzare l'approccio ventilato in questo thread.
La soluzione standard per un dispatcher prevede l'uso di funzioni void e il passaggio dei necessari parametri tramite uno o più dei seguenti metodi:
-
Variabili static a livello di modulo o eseguibile, deprecata ma efficientissima;
- Passaggio di un
numero costante di puntatori, anche void (al limite, uno). Nulla vieta di passare una serie di NULL per i parametri non utilizzati, e di includere un puntatore al valore di ritorno richiesto: mediamente efficiente;
- Uso dell'apposita sintassi per un
numero di argomenti variabile con conseguente utilizzo di va_start(),
va_arg(), va_end()... scarsamente efficiente ma adeguatamente generico;
- Emulazione high-level di un
parameter stack tramite heap o simili: minima efficienza, massima portabilità.
Esistono inoltre librerie e/o preprocessori per la programmazione generica (
vulgo: template) e il cast automatico in puro C, nessuno dei quali sembra però funzionare decentemente.