2013-08-20 8 views
6

Come definire i tipi di ID forti in C++ 11? È possibile fare alias di tipi interi ma ricevere avvisi dal compilatore quando si mescolano i tipi?Come definire i tipi di ID forti in C++ 11?

es:

using monsterID = int; 
using weaponID = int; 

auto dragon = monsterID{1}; 
auto sword = weaponID{1}; 

dragon = sword; // I want a compiler warning here!! 

if(dragon == sword){ // also I want a compiler warning here!! 
    // you should not mix weapons with monsters!!! 
} 
+3

Non si può fare questo con typedef. Crea nuovi tipi. C'è qualcosa in Boost IIRC. –

+0

http://stackoverflow.com/q/18251447/560648 –

+1

Di interesse è questa nuova funzionalità proposta per C++ 1y: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ 2013/n3515.pdf –

risposta

5

Se stai usando spinta, prova a BOOST_STRONG_TYPEDEF

Esempio dalla documentazione:

BOOST_STRONG_TYPEDEF(int, a) 
void f(int x); // (1) function to handle simple integers 
void f(a x); // (2) special function to handle integers of type a 
int main(){ 
    int x = 1; 
    a y; 
    y = x;  // other operations permitted as a is converted as necessary 
    f(x);  // chooses (1) 
    f(y);  // chooses (2) 
} 
+0

Grazie. Penso che sia un'ottima soluzione. Ma stavo cercando se con il nuovo standard C++ 11 è possibile farlo senza usare macro, o classi complete. – Zhen

Problemi correlati