templates - operatoren überladen
-
template <typename T> T operator[] (unsigned int pos) { if((pos < 0)||(pos > SIZE)) throw InterprocessException("::Access Violation", __FILE__, __LINE__); return reinterpret_cast<T*>(lpv_Highmap_Ptr)[pos]; } aufruf: cout << "Parameter1: " << (f.operator[]<float>(2)) << endl;
das haut ja die ganze syntax zusammen...;-( wie löst man das denn schöner?
cu
-
f[2] ? Was ist f?
-
in solchen fällen ist die benutzung eines operator[] relativ sinnlos, da es die übersicht nicht erhöht(was ein operator imho tun sollte).
f.getElement<float>(2);
das ist imho schöner.
-
hmm, dass sieht so ein wenig merkwürdig aus, so ohne Kontext.
warum ein Template []-Operator? Vorallem warum mapst du dann die Adressierung nach diesem Template Typ?
Ansonsten
1. Nimm size_t als Parameter für den []-Operator
2. Ist es in C++ unüblich den []-Operator mit Access-Check zu implementieren, da würde ich lieber eine assert-Art nehmen und eine at-Funktion einbauen
-
Von welchem Typ sind denn die Elemente in lpv_Highmap_Ptr? Diesen Typ solltest du auch als Rückgabetyp verwenden. Dann fällt auch dieser blöde Cast weg.
Einen op[] implementiert man zudem üblicherweise mit Referenz Rückgaben, sonst wären ja solche Anweisungen
f[2] = 0;
vollkommen sinnlos. Und wenn nur lesender Zugriff erlaubt ist, dann mach den op sowie Rückgabewert const.
Und kannst du mir noch verraten wie sowas
[cpp]if((pos < 0)||(pos > SIZE))[/cpp]
bei einem unsigned Typ möglich wird?
Zudem sollte pos == SIZE ebenfalls ein Fehler sein.
-
was hälst du denn von
float f; f.getElement(42, f);
?
-
Wat? Wusste gar nicht, dass float 'ne Memberfunktion getElement hat.
-
War ein Tippfehler.
Das zweite f sollte für fileMapping stehen.