Daar heb je de ~ voor, niet de !

. De oorzaak zit 'm in het feit dat alle primitives impliciet converteerbaar zijn naar bool (wat gewoon != 0 betekent)
Dat de enum (false, true, FileNotFound) intern aan een integer hangt (ofzo) kan
Nee kan niet, false en true zijn geen geldige enum values omdat dat reserved words zijn

. Dat klinkt flauw, maar dat maakt de enum { False, True, FileNotFound } niet anders dan de enum { State1, State2, State3 }, en ben je sowieso dom als je daar een imliciete bool conversie op los laat

. Je zal dus altijd moeten checken met == en !=. Je hoeft dus ook niet te onthouden wat 0 was.
Of:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
| class MyEnum
{
public:
enum enum_t { True, False, FileNotFound };
MyEnum(enum_t v) : m_value(v) { }
operator == (MyEnum other) const { return m_value == other.m_value; }
operator != (MyEnum other) const { return !(*this == other) };
operator bool() const { return m_value == True; }
private:
enum_t m_value;
}; |
C++09 gaat waarschijnlijk stricte enums ondersteunen:
http://www.open-std.org/j...ocs/papers/2004/n1579.pdf, juist omdat bovenstaande workaround zo omslachtig is.
[
Voor 24% gewijzigd door
.oisyn op 11-01-2007 18:22
]