Sto cercando di determinare come gestire tipi e conversioni tra tipi all'interno di un compilatore che sto scrivendo. Il compilatore è stato scritto in C #.
Esistono diversi tipi di tipi.
- Classi (sola lettura / non modificabile)
- Tipi mutabili (che contengono un altro tipo. Pensa al contrario di C ++ const.)
- Tipi generici (con vincoli relativi ai tipi)
- etc
Il problema che sto cercando di risolvere è dato da due tipi, come posso determinare se uno può essere convertito all'altro. (ad esempio, consentire l'assegnazione di un tipo mutabile alla versione di sola lettura del tipo)
Il mio primo pensiero è stato quello di utilizzare un metodo virtuale e un visitatore. Tuttavia, poiché i tipi possono dipendere da altri (ad esempio, un tipo mutabile è un wrapper che si riferisce a un altro tipo.), Ciò può causare il numero di casi che devono essere gestiti per balloon. Sto cercando un design che lo mantenga al minimo.