enum Color
{
Red =0,
Green=1,
Blue=2
};
std::string ColorMap[] = { "Red", "Green","Blue" };
Uso ColorMap[c]
para conseguir la representación de cadena:
std::string msg = "Invalid colour '" + ColorMap[c] + "' selected.";
Sin embargo, si los valores de enumeración no son continuas, entonces usted puede utilizar std::map
en cambio, como:
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.";
No genera un error si olvida * agregar * cadenas ... –
@MatthieuM. Cierto. La única manera confiable de construir algo como esto probablemente sean las macros. – pmr
Me temo que sí. Siempre pensé que era una lástima, habría apreciado que el compilador construyera la función en el lateral. Una de las formas que encontré fue el uso de macros, aunque esto se basa en la función más o menos. La otra consistía en utilizar pruebas para asegurarse de que la traducción funcionaba para los tipos anteriores (al menos) y luego confiar en el desarrollador para * pensar * :) –