enum Color
{
Red =0,
Green=1,
Blue=2
};
std::string ColorMap[] = { "Red", "Green","Blue" };
Sử dụng ColorMap[c]
để có được những đại diện chuỗi:
std::string msg = "Invalid colour '" + ColorMap[c] + "' selected.";
Tuy nhiên, nếu các giá trị của enum là không liên tục, sau đó bạn có thể sử dụng std::map
thay vì như:
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.";
Nó không tạo ra lỗi nếu bạn quên * thêm * chuỗi ... –
@MatthieuM. Thật. Cách đáng tin cậy duy nhất để xây dựng một cái gì đó như thế này có lẽ là các macro. – pmr
Tôi sợ như vậy. Tôi đã luôn luôn nghĩ rằng đó là một sự xấu hổ là tốt, tôi sẽ đánh giá cao trình biên dịch xây dựng các chức năng trên mặt. Một cách tôi tìm thấy là sử dụng macro, mặc dù điều này là inline chức năng nhiều hơn hoặc ít hơn. Cách khác là sử dụng các thử nghiệm để đảm bảo bản dịch đã hoạt động đối với các loại trước đó (ít nhất) và sau đó dựa vào nhà phát triển để * suy nghĩ * :) –