ben soru bile mantıklı emin değilim. Temelde imkansız olan herhangi bir hızındadır. Düşünün:
enum Animal
{
cat = 0,
dog = 5,
dolphin = 8,
canine = 5,
bear = 20
};
yatan değer 5
olduğunda, o dog
tarafından belirlenen olup olmadığını veya canine
tarafından belirleme yolu ve böylece bir sonraki değeri dolphin
veya bear
olmalıdır olup olmadığını bilmeden yolu yoktur. Değerleri bir diziye ekleyebilir ve bunun üzerine yineleyebilirsiniz, ancak Başka bir çözüm göremiyorum.
Genelde, tabii ki, çoğu zaman bu böyle açıkça etkileyen değerleri konum, bir bit maskesi (std::ios_base::fmtflags
gibi mesela ) tanımlarken ve bu durumda, yineleme için hiçbir mantıklı . Aklıma gelen diğer kullanım durumları (yukarıda benim dog
/canine
örnekte olduğu gibi) özel sentinal ilerlerken muhtemelen atlamak isteyeyim değerleri (örn şey unset
gibi), ya da eş olurdu bu durumda, sen' d muhtemelen sadece eş anlamlı birini ziyaret etmek istiyorum ve gerçekçi, şöyle yazma şey olur:
enum Animal
{
cat,
dog,
canine = dog,
dolphin,
bear
};
ve her zamanki yineleme hileler ne istediğinizi tam neden olacaktır. postfix ++
, <
ve ihtiyacınız başka bir şey için
enum Animal
{
Cat = 0
, Dog = 5
, Dolphin = 8
};
inline Animal& operator++ (Animal &x)
{
switch (x) {
case Cat:
x = Dog;
break;
case Dog:
x = Dolphin;
break;
case Dolphin:
default:
x = static_cast<Animal>(static_cast<int>(x) + 1);
break;
}
return x;
}
DTTO:
Doğrudan "enum" üzerinde değil. Ancak "enum" öğesinin tüm öğelerini bir kapsayıcıya ("vektör", "set", "unordered_set", her neyse ...) el ile koyabilirsiniz ve ardından bu kapsayıcıda yineleyin. – syam
Yani demek istediğin bir şey istiyorsun (Animal a = Cat; a! = Dolphin; a ++) '? Bu, ilk numaralandırma için çalışırken, kişisel olarak tavsiye edeceğim bir şey değil, çünkü okumak ve anlamak zor olabilir. –
Bu konudaki cevabı http: // stackoverflow bulabilirsiniz.com/questions/261963/nasıl-i-iterate-over-an-enum. – blitz