enum Color
{
Red =0,
Green=1,
Blue=2
};
std::string ColorMap[] = { "Red", "Green","Blue" };
Usa ColorMap[c]
per ottenere la rappresentazione di stringa:
std::string msg = "Invalid colour '" + ColorMap[c] + "' selected.";
Tuttavia, se i valori di enum non sono continui, quindi è possibile utilizzare std::map
invece come:
enum Color
{
Red = 0x1,
Green = 0x2,
Blue = 0x4,
Black = 0x8,
};
//C++11 only, as it uses std::initializer_list
std::map<Color, std::string> ColorMap = {
{Red, "Red"},
{Green, "Green"},
{Blue, "Blue"},
{Black, "Black"}
};
//same as before!
std::string msg = "Invalid colour '" + ColorMap[c] + "' selected.";
Non genera un errore se si dimentica di * aggiungere * stringhe ... –
@MatthieuM. Vero. L'unico modo affidabile per creare qualcosa di simile sono probabilmente le macro. – pmr
Temo di sì. Ho sempre pensato che fosse un peccato, avrei apprezzato il compilatore che costruiva la funzione sul lato. Un modo che ho trovato è stato l'utilizzo di macro, anche se questo è in linea la funzione più o meno. L'altro era usare i test per assicurarsi che la traduzione funzionasse per i tipi precedenti (almeno) e poi affidarsi allo sviluppatore per * think * :) –