Esiste un idioma per un typedef rigoroso in C++, possibilmente utilizzando i modelli?Idiom per typedef rigoroso in C++
Qualcosa di simile:
template <class base_type, int N> struct new_type{
base_type p;
explicit new_type(base_type i = base_type()) : p(i) {}
};
typedef new_type<int, __LINE__> x_coordinate;
typedef new_type<int, __LINE__> y_coordinate;
modo che io possa fare una cosa del genere un errore di compilazione:
x_coordinate x(5);
y_coordinate y(6);
x = y; // whoops
Il __LINE__
in là sembra che potrebbe essere problemi, ma non preferirei dover creare manualmente un insieme di costanti per mantenere unico ogni tipo.
coordinate non sono un ottimo software per questo. Un prodotto di due coordinate non è una coordinata, ecc. Puoi invece guardare a Boost.Units. –
Ho eliminato la mia risposta che suggeriva [BOOST_STRONG_TYPEDEF] (http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/strong_typedef.html), perché a quanto pare funziona per la risoluzione di sovraccarico ma non genera la compilazione errori sull'assegnazione incrociata. – Angew
Mi interrogo sul valore di ciò che si vuole fare. Cosa succede quando si desidera eseguire una rotazione, ad esempio? 'x = sin (theta) * y + cos (theta) * x' dovrebbe essere interamente valido. –