Supponiamo che i parametri delle funzioni che rappresentano le operazioni dell'algebra relazionale siano rappresentati da singoli tipi: structs o classes. Un'operazione come join (naturale) avrà parametri di due tipi (T1, T2) come input e produrrà un valore di ritorno di un terzo tipo (T3). Esiste una relazione tra i tipi T1, T2 e T3 che in teoria possono essere conosciuti e controllati in fase di compilazione. C'è un modo per farlo usando i modelli C ++?
Esempio: assumere questi tipi di input (i dati del fornitore CJDate):
struct supplier {
string sid;
string sname;
integer status;
string city;
}
struct supplierpart {
string sid;
string pid;
integer qty;
}
Questo è il tipo di output:
struct ssp_join {
string sid;
string pid;
integer qty;
string sname;
integer status;
string city;
}
Esiste una strategia che consentirebbe (per esempio) di generare il tipo di output dagli input usando i template e quindi di essere staticamente controllato?
Divulgazione: sono un programmatore C ++ esperto e al momento non ho idea di come risolvere questo problema o dimostrare che non può essere fatto. Una soluzione in qualche altra lingua sarebbe ugualmente interessante.
Dopo alcune ulteriori indagini, mi è sembrato che la caratteristica principale mancante potesse essere il tipo di metaprogrammazione che significa la possibilità di eseguire codice arbitrario in fase di compilazione, prima della risoluzione del tipo. Il linguaggio D sembra avere quello. Mi chiedo se il comitato C ++ lo stia prendendo in considerazione.