Arokh
2006-09-26, 16:19:45
Folgende Problemstellung: zwei Kinder, Alice und Bob, sollen unabhängig voneinander Tierarten aufzählen. Die Zahl der ihnen einfallenden Tierarten ist unterschiedlich, Bobs Aufzählung enthält Tiere die bei Alice nicht vorkommen, und umgekehrt, und diejenigen Tiere, die in beiden Aufzählungen enthalten sind, haben unterschiedliche Reihenfolgen. Die Realisierung der beiden Aufzählungen als enums könnte also z.B. so aussehen:
namespace Alice
{
enum Tier
{
Hund,
Katze,
Kuh,
Pferd,
Elefant,
Esel,
};
};
namespace Bob
{
enum Tier
{
Katze,
Pferd,
Hund,
Klapperschlange,
Papagei,
Krokodil,
Elefant,
};
};
Jetzt soll ein Konvertierungsoperator definiert werden, der die in beiden Aufzählungen vorkommenden Tiere (hier: Katze, Hund, Pferd, Elefant) von der einen zur anderen Aufzählung konvertiert, etwa so:
Alice::Tier aliceTier = (Alice::Tier) Bob::Katze; // -> aliceTier == Alice::Katze
Für nicht bei beiden vorkommende Tiere müßte mann zusätzlich einen Wert ungültiges_Tier definieren, den der Operator dann zurückgibt.
Die Frage ist: geht das so überhaupt? Oder kann man einen Konvertierungsoperator immer nur als Member einer Klasse implementieren?
Wenn es geht, wie sähe dann der Prototyp aus? So vielleicht:
operator Alice::Tier(Bob::Tier);
?
namespace Alice
{
enum Tier
{
Hund,
Katze,
Kuh,
Pferd,
Elefant,
Esel,
};
};
namespace Bob
{
enum Tier
{
Katze,
Pferd,
Hund,
Klapperschlange,
Papagei,
Krokodil,
Elefant,
};
};
Jetzt soll ein Konvertierungsoperator definiert werden, der die in beiden Aufzählungen vorkommenden Tiere (hier: Katze, Hund, Pferd, Elefant) von der einen zur anderen Aufzählung konvertiert, etwa so:
Alice::Tier aliceTier = (Alice::Tier) Bob::Katze; // -> aliceTier == Alice::Katze
Für nicht bei beiden vorkommende Tiere müßte mann zusätzlich einen Wert ungültiges_Tier definieren, den der Operator dann zurückgibt.
Die Frage ist: geht das so überhaupt? Oder kann man einen Konvertierungsoperator immer nur als Member einer Klasse implementieren?
Wenn es geht, wie sähe dann der Prototyp aus? So vielleicht:
operator Alice::Tier(Bob::Tier);
?