Tôi có một đoạn mã lặp lại nơi tôi lặp lại tất cả các thành viên của một số enum class
.Cho phép dựa trên phạm vi Đối với các lớp học enum?
Vòng lặp for
mà tôi hiện đang sử dụng trông rất khó sử dụng so với range-based for
mới.
Có cách nào để tận dụng lợi thế của các tính năng C++ 11 mới để cắt giảm độ dài cho vòng lặp for
hiện tại của tôi không?
Mã hiện tại mà tôi muốn cải thiện:
enum class COLOR
{
Blue,
Red,
Green,
Purple,
First=Blue,
Last=Purple
};
inline COLOR operator++(COLOR& x) { return x = (COLOR)(((int)(x) + 1)); }
int main(int argc, char** argv)
{
// any way to improve the next line with range-based for?
for(COLOR c=COLOR::First; c!=COLOR::Last; ++c)
{
// do work
}
return 0;
}
Nói cách khác, nó sẽ được tốt đẹp nếu tôi có thể làm điều gì đó như:
for(const auto& c : COLOR)
{
// do work
}
Thú vị. Ada có tính năng này từ năm 1983. – Shark8
'(COLOR) (((int) (x) + 1))' Thay vì 'int', hãy xem xét sử dụng' std :: bases_type :: type'. –
Dự kiến rằng Purple bị bỏ qua? – kennytm