Tôi không chắc chắn rằng vấn đề thậm chí có ý nghĩa. Đó là tại bất kỳ tỷ lệ về cơ bản là không thể. Xem xét:
enum Animal
{
cat = 0,
dog = 5,
dolphin = 8,
canine = 5,
bear = 20
};
Khi giá trị cơ bản là 5
, bạn không có cách nào xác định dù nó đã được thiết lập bởi dog
hoặc bằng canine
, và vì vậy không có cách nào biết liệu giá trị tiếp theo nên dolphin
hoặc bear
. Bạn có thể đặt các giá trị trong một mảng và lặp lại điều đó, nhưng Tôi không thấy bất kỳ giải pháp nào khác.
Nói chung, tất nhiên, hầu hết thời gian bạn một cách rõ ràng giá trị ảnh hưởng như thế này này, bạn đang xác định một bitmask (ví dụ như std::ios_base::fmtflags
), và trong trường hợp đó, nó làm cho không có tinh thần để lặp . Các trường hợp sử dụng khác mà tôi có thể nghĩ là giá trị đặc biệt (ví dụ: unset
), mà bạn có thể muốn bỏ qua khi lặp lại hoặc từ đồng nghĩa (ví dụ: dog
/canine
ví dụ ở trên), trong trường hợp này, bạn ' d lẽ chỉ muốn ghé thăm một trong những từ đồng nghĩa và thực tế, bạn muốn ghi cái gì đó như:
enum Animal
{
cat,
dog,
canine = dog,
dolphin,
bear
};
, và các thủ thuật lặp thông thường sẽ cho kết quả chính xác những gì bạn muốn .
Nguồn
2013-07-22 10:58:35
Không trực tiếp trên 'enum'. Tuy nhiên, bạn có thể tự đặt tất cả các phần tử của 'enum' trong một thùng chứa (' vectơ', 'bộ',' unordered_set', bất kỳ thứ gì ...) và sau đó lặp lại trên vùng chứa đó. – syam
Bạn có nghĩa là bạn muốn một cái gì đó như 'cho (Animal a = Cat; a! = Dolphin; a ++)'? Trong khi điều này làm việc cho các điều tra đầu tiên, nó không phải là một cái gì đó tôi sẽ cá nhân đề nghị, vì nó có thể khó đọc và hiểu. –
Bạn có thể tìm câu trả lời trong chủ đề này http: // stackoverflow.com/questions/261963/how-can-i-iterate-over-an-enum. – blitz