webForumDet fria alternativet

Hitta värden i enum

3 svar · 242 visningar · startad av Lime

LimeMedlem sedan sep. 2001961 inlägg
#1

Tjing!

Jag har en enumeration som är ganska stor, 127 värden för att vara mer exakt. I denna finns det luckor, d.v.s. jag kan inte bara kolla om det värde jag får in är större eller mindre än max.

Min enum ser typ ut såhär:

enum Cause{ REJECTED = 2,
NOT_SUPPORTED = 4,
NOT_IMPLEMENTED = 10,
UNKNOWN_ERROR = 31
}

men många fler.

Grejen är den att om jag får in värdet 3 så är detta ett godkänt värde, det går enligt ansi-standarden att skriva Cause ch = Cause(3), eftersom det ligger inom intervallet för enumen.

Vad som skall hända om jag får in värdet 3 är att den skall använda ett annat värde. I min kod så har jag ca 10 värden i intervallet 1-31 där alla icke specificerade värden skall får värdet 31, 10 värden i intervallet 32-72 där alla icke specificerade värden ska får värdet 72 o.s.v.

Hur tusan gör man detta på ett smidigt sätt?

Det går att göra med en gigantisk switch-case men då måste denna skrivas om så fort man lägger till ett värde i enumen... och det är inte bra.

Någon som har någon bra ide?

/Lime

Sang-draxMedlem sedan juli 2002581 inlägg
#2

Byt till något lämpligare än en enum.
Det finns inte så mycket 'smidiga' finesser med en enum, den håller värden helt enkelt.

PeWMedlem sedan juni 200010 432 inlägg
#3

En lite mer utvecklad tillståndsmaskin skulle kunna vara lösningen för dig. Finns olika sätt att implementera detta och kanske denna eller informationen som finns här kan vara till hjälp?

LimeMedlem sedan sep. 2001961 inlägg
#4

Jag skulle gärna byta från enum till vector... om det inte vore så att designreglerna säger att det skall vara en enum...

Tack PeW för länkarna.

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)