Oi pessoal!
Quero enums que forneçam mensagens de erro úteis e permitam que um nome faça parte de muitos tipos.
enum STATE { ON };
enum MOTOR { ON }:
O texto acima iria reclamar de colisões de nomes.
Dado este método:
void onlyOnOff(ON_OFF on){
if (on == ON){
//do something
}else {
//do something else
}
}
Desejo um erro do compilador em caso de falha em fornecer ON ou OFF para onlyOnOff.
Vamos investigar minha solução:
com a implementação de classes e constantes abaixo, isso funciona.
Se eu passar algo diferente de ON ou OFF para onlyOnOff, recebo uma mensagem de erro como esta:
‘onlyOnOff’: não é possível converter o parâmetro 1 de ‘<tipo>’ para ‘ON_OFF’
class ON_OFF_ {}; typedef const ON_OFF_* const ON_OFF;
class ON_ : public ON_OFF_{};
const ON_ on_; const ON_ * const ON = &on_;
class OFF_ : public ON_OFF_{};
const OFF_ off_; const OFF_ * const OFF = &off_;