konwersja typu a instrukcja switch

0

Cześć, mam takie pytanie: czy jest możliwe używanie obiektów własnej klasy przy operatorze case w instrukcji switch? Próbowałem zrobić konwersję typu int, ale nie pomogło ;-(
Chodzi mi o coś takiego:

class MojaKlasa
	{
	public:
		operator int const()
			{
			return ID;
			}
	private:
		int ID;
	};

inline int fun(MojaKlasa m_check, MojaKlasa m1, MojaKlasa m2)
	{
	switch(m_check)
		{
		case m1:
		return 1;

		case m2:
		return 2;
		}
	}

Wywala mi błąd: error C2051: case expression not constant

Z góry dzięki za pomoc.

2

Wyrażenie używane przy case musi być stałą znaną podczas kompilacji.

1

Kompilator wyraźnie mówi w czym problem: to co jest przy case musi być stałą (znaną podczas procesu budowania projektu).

0

ohh, ok - dzięki za wyjaśnienie ;-)

3

Jeśli chcesz się nagimastykować to się da, ale są dość poważne ograniczenia:

  1. wyrażenie przy case musi być stałą znaną podczas kompilacji, tak jak napisał @Patryk27,
  2. wyrażenie musi być konwertowalne do typu warunku instrukcji switch, oczywiście w czasie kompilacji.

Da się to zrobić, np. kiedyś zrobiłem switch dla stringów: http://melpon.org/wandbox/permlink/SBnT3SCLkeWZMwTn

Szerzej opisany: http://dev.krzaq.cc/switch-on-strings-with-c11/

Edit: istotna uwaga: sam musisz zagwarantować unikalność wyników konwersji. W przypadku stringów jej nie ma (chociaż jest całkiem ciężko o kolizję FNV-1a), ale już np. jeśli byś miał klasę Punkt2D zawierającą 32-bitowe współrzędne to można to zrobić w 100% bezpiecznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1