const-correctness 2-dim member array
-
Hallo alle,
bin leider C++ Kackb00n, wollte mir aus Jux aber doch mal eine billo Matrixklasse basteln. Ich weiß, dass es a) dafür etliche Bibliotheken und b) mit std::vector / std::array weniger Tränen gibt; mir geht es hier konkret um grundsätzliches Verständnis.
#include <cstddef> #include <iostream> using std::cout; using std::size_t; template <typename T, size_t N> struct Matrix { T data[N][N]; T const (&(operator[])(size_t idx))[N] /*const*/ { return data[idx]; } }; int main() { Matrix<int, 3> e = {1, 0, 0, 0, 1, 0, 0, 0, 1}; cout << e[0][0]; // ok const auto& ce = e; //cout << ce[0][0]; // error }Kann ich operator[] als const markieren? Wenn ich es so mache, wie im code angedeutet, bekomme ich folgenden Fehler:
12:42: error: expected ‘;’ at end of member declaration T const (&(operator[])(size_t idx))[N] const ^ 13:5: error: expected unqualified-id before ‘{’ tokenIch vermute, dass durch die mehrfache Indirektion das const irgendwo verloren geht. Geht das grundsätzlich nicht oder habe ich bloß syntaktisch daneben gehauen?
-
Was soll das werden?
Ueberlade doch viel lieber den () operator oder biete gleich eine Memberfunktion an.
-
T const (&(operator[])(size_t idx))[N] const->
T const (&(operator[])(size_t idx) const)[N]
-
Kellerautomat schrieb:
T const (&(operator[])(size_t idx))[N] const->
T const (&(operator[])(size_t idx) const)[N]Danke, lieber Kellerautomat, das habe ich gesucht.

-
Warum nicht
auto operator[]( std::size_t idx ) const -> decltype((*data)) { return data[idx]; }(Hier zeigt sich übrigens wieder eine Stärke von
AUTO_RETURN- dass es nämlich Wertkategorien beachtet)