Come definire nomi diversi per lo stesso tipo e farli controllare dal compilatore? [duplicare]

2

Vorrei definire diversi nomi per lo stesso tipo e fare in modo che il compilatore li distingua.

La mia motivazione è che diverse%% di% delle variabili di co_de potrebbero rappresentare unità molto diverse e vorrei che il compilatore rilevasse gli errori nelle unità.

int non genera alcun avviso, quando si assegna a typedef int Speed da Speed . Una possibile soluzione è l'utilizzo di un enum . Inoltre, l'enum "hack" non mi consente di specificare la rappresentazione sottostante, ad es. int .

È quello che sto cercando di fare una cattiva pratica? Come posso ottenerlo in C ++?

Modifica:

Grim. Ho legato utilizzando uint8_t .

error: invalid conversion from 'int' to 'Speed' [-fpermissive] 
error: no match for 'operator+=' in 'a += b'

Questi sono solo un paio di errori che ho riscontrato. Le enumerazioni non possono essere la strada giusta.

Penserò a enum Speed {}; , e se nel mio caso alcuni membri e operatori predefiniti possono effettivamente rendere il resto del codice più pulito.

Hmm, qui è piuttosto una ricerca, al punto di fare la mia domanda un duplicato.

    
posta Vorac 17.06.2014 - 18:31
fonte

1 risposta

1

Non puoi davvero farlo in C ++, per quanto ne so.

Potresti riuscire a farlo, usando modelli e metaprogrammazione dei modelli, come Amplia la libreria per le unità di misura di cui parlava GlenH7, ma questo approccio richiederà molto tipizzazione e molto dolore. Perderai TUTTE le tue operazioni predefinite e dovrai reimplementare quelle di cui hai bisogno, nella sintassi della metaprogrammazione del modello.

Quello che vuoi è qualcosa come il tipo di Ada e il sottotipo di sistema. Ada ti consente di definire nuovi tipi, derivati da un tipo esistente, che potrebbero avere intervalli identici, ma non sono direttamente assegnabili o compatibili con i tipi e nuovi sottotipi, che sono direttamente assegnabili e compatibili con il testo.

    
risposta data 17.06.2014 - 20:04
fonte

Leggi altre domande sui tag