Seltsame Fehlermeldung



  • Man sollte auch NIE von Containern erben, [...]

    Ist Vererbung nicht eine der Grundprinzipien von OOP?
    Macht man bei anderen Sprachen (Ruby, Smalltalk) doch auch auch so.

    Und versuch Makros mal zu debuggen. Ich find sowas nie so toll...

    Durch den Schalter -E kann ich mir die Pre-Prozessoraussgaben ansehen lasst.
    Um zu sehen, wohin das Template expandiert muss ich mir schon die Maschinensprache lesen.



  • Strontium schrieb:

    Man sollte auch NIE von Containern erben, [...]

    Ist Vererbung nicht eine der Grundprinzipien von OOP?
    Macht man bei anderen Sprachen (Ruby, Smalltalk) doch auch auch so.

    Ja, aber in C++ verwendet man eben nicht nur OOP.
    Das ist der Vorteil von C++ gegenüber reinen OOP-Sprachen.
    Komposition ist auch mächtig, geschweige denn freie Funktionen.
    Erweiterung von Containern geht via Iteratoren und 'ner freien Funktion (siehe Header algorithm).

    Edit: Und was Makros angeht: Schon mal was von Typsicherheit gehört? Nee? Makros nämlich auch nicht.



  • Ja, aber in C++ verwendet man eben nicht nur OOP.

    Und heißt, ich darf nur dann OOP Programmieren, wenn es nicht mehr anders geht?
    Vielleicht haben wir nur anderen Vorstellungen von Programmdesign.
    Ich finde OOP eben eine geniale Sache um die Wartbarkeit und Erweiterbarkeit zu erhalten.

    Komposition ist auch mächtig, geschweige denn freie Funktionen.

    Aber auch Vererbung hat ihren Zweck.

    Und was Makros angeht: Schon mal was von Typsicherheit gehört? Nee? Makros nämlich auch nicht.

    1. Doch!
    2. Typsicherheit wird überbewertet
    3. Nenne mir bitte mal ein (Praxisrelevantes) Szenario wo bei meiner Lösung, die Typsicherheit verletzt wird.


  • IMHO ein Troll



  • Strontium schrieb:

    Ja, aber in C++ verwendet man eben nicht nur OOP.

    Und heißt, ich darf nur dann OOP Programmieren, wenn es nicht mehr anders geht?
    Vielleicht haben wir nur anderen Vorstellungen von Programmdesign.
    Ich finde OOP eben eine geniale Sache um die Wartbarkeit und Erweiterbarkeit zu erhalten.

    Komposition ist auch mächtig, geschweige denn freie Funktionen.

    Aber auch Vererbung hat ihren Zweck.

    Richtig, aber vererbung hat gravierende Nachteile gegenüber von Komposition, wie z.B. die statische Beziehung. Zur Laufzeit kannst du etwas Komponiertes austauschen, was Vererbtes nicht.
    Und es ging explizit um die Ableitung von Containern. Das ist rein vom Design her schon Schwachsinn (das verstehe ich in Java auch nicht, da wird so oft von Containern abgeleitet und alles, mir wird regelmässig schlecht dadurch).
    Vererbung und Komposition, beides gibt es, beides hat seine Anwendungsfälle und beides wird gebraucht/genutzt.

    Strontium schrieb:

    Und was Makros angeht: Schon mal was von Typsicherheit gehört? Nee? Makros nämlich auch nicht.

    1. Doch!

    Sehr gut.

    Strontium schrieb:

    1. Typsicherheit wird überbewertet

    Nein. In C++ nicht. Während andere Sprachen zwar die Typen überprüfen, oder da per Compiler was simulieren (Java-generics z.B.) ist das allein das Typsystem von C++ schon Turing-vollständig, sprich du kannst schon alles damit berechnen, was berechenbar ist, und das NUR allein mit dem Typsystem, nicht noch mit der Sprache (klar, da geht das auch).
    Des Weiteren gibt es Konzepte wie Const-Correctness, diese Konzepte zeigen dir während der Compiletime semantische Fehler, sprich verhidnern Bugs. Aber auch nur wenn man sie benutzt und anwendet und das machst du hier nicht.

    Strontium schrieb:

    1. Nenne mir bitte mal ein (Praxisrelevantes) Szenario wo bei meiner Lösung, die Typsicherheit verletzt wird.

    Da wird sicherlich jemand einen Fehler finden.



  • Nein. In C++ nicht. Während andere Sprachen zwar die Typen überprüfen, oder da per Compiler was simulieren (Java-generics z.B.) ist das allein das Typsystem von C++ schon Turing-vollständig, sprich du kannst schon alles damit berechnen, was berechenbar ist, und das NUR allein mit dem Typsystem, nicht noch mit der Sprache (klar, da geht das auch).

    Mir ist TMP sehr wohl bekannt, aber nur weil ich etwas kann sehe ich noch keinen Grund darin es auch möglichst weit auszureizen.
    TMP hat genauso Nachteile:
    * Langsamer Übersetzungsvorgang
    * Schwer lesbar.

    Des Weiteren gibt es Konzepte wie Const-Correctness, diese Konzepte zeigen dir während der Compiletime semantische Fehler, sprich verhidnern Bugs. Aber auch nur wenn man sie benutzt und anwendet und das machst du hier nicht.

    Meine Lösung unterstützt "Const-Correctness". Bitte aufzeigen, wo was fehlt.



  • Strontium schrieb:

    Ja, aber in C++ verwendet man eben nicht nur OOP.

    Und heißt, ich darf nur dann OOP Programmieren, wenn es nicht mehr anders geht?
    Vielleicht haben wir nur anderen Vorstellungen von Programmdesign.
    Ich finde OOP eben eine geniale Sache um die Wartbarkeit und Erweiterbarkeit zu erhalten.

    Leute gibts.

    Komposition ist auch mächtig, geschweige denn freie Funktionen.

    Aber auch Vererbung hat ihren Zweck.

    Klar, aber nicht bei Containern!

    Und was Makros angeht: Schon mal was von Typsicherheit gehört? Nee? Makros nämlich auch nicht.

    1. Doch!

    Reference Collapsing...

    1. Typsicherheit wird überbewertet

    Wenn dir Typsicherheit nicht wichtig ist, programmiere doch in JavaScript.
    Typsicherheit ist imo einer der größten Vorteile wenn C++.

    1. Nenne mir bitte mal ein (Praxisrelevantes) Szenario wo bei meiner Lösung, die Typsicherheit verletzt wird.

    Member int*:

    prog.cpp: In member function ‘virtual const int*& FeldAusInt::operator[](int) const’:
    prog.cpp:48:1: error: invalid initialization of reference of type ‘const int*&’ from expression of type ‘int*’
    


  • Leute gibts.

    Unglaublich 🙄

    Klar, aber nicht bei Containern!

    Sagt wer?

    Reference Collapsing...

    Gibts erst seit C++11. Wie ist man bloß die ganze Zeit ohne damit Ausgekommen.

    Wenn dir Typsicherheit nicht wichtig ist, programmiere doch in JavaScript.

    Typsicherheit wird überbewertet vs Typsicherheit ist sinnlos.
    Man kann auch zwischen den Extremen leben.



  • Strontium schrieb:

    Leute gibts.

    Unglaublich 🙄

    Ja, find ich auch. 😉

    Klar, aber nicht bei Containern!

    Sagt wer?

    Ich. Siehste doch. :p
    Um einen Container zu erweitern, kann man in C++ auch eine freie Funktion nutzen.
    Das ist schneller, besser etc.
    Es ist einfach mehr C++-like und man sollte sich in der Programmierung schon der Sprache anpassen.

    Reference Collapsing...

    Gibts erst seit C++11. Wie ist man bloß die ganze Zeit ohne damit Ausgekommen.

    Es gab nicht viel zum Collapsen.
    Aus T und & wurde T&.
    Aus T& und & wurde T& (bei Templates).
    T&& gabs ja noch nicht.

    Wenn dir Typsicherheit nicht wichtig ist, programmiere doch in JavaScript.

    Typsicherheit wird überbewertet vs Typsicherheit ist sinnlos.
    Man kann auch zwischen den Extremen leben.

    Nein. 😉



  • Man kann auch mit 'nem Hammer 'ne Schraube in die Wand hauen...



  • warum nehmt ihr einen typen ernst der seinen quelltext deutschifiziert? 😮



  • Um einen Container zu erweitern, kann man in C++ auch eine freie Funktion nutzen.
    Das ist schneller, besser etc.
    Es ist einfach mehr C++-like und man sollte sich in der Programmierung schon der Sprache anpassen.

    Genau!
    Und am besten noch mit viel Polycies, Typelisten, SFINAE und was die Sprache sonst noch hergibt.
    CRTP aber besser nicht, sonst haben wir ja wieder Vererbung.
    Jeder Member sollte auch noch mindestens, sagen wir mal 20 Templateparameter unterstützen. Man kann ja nie wissen.

    Ist wohl die beste Art, neben der Ungarischen Notation um seinen Arbeitsplatz zu sichern.
    Jedenfalls solange, bis der Chef beschließt, wegen Unwartbarkeit auf eine andere Programmiersprache zu Portieren. 😉



  • Die Template-Spielereien (Polycies, Typelisten, SFINAE) die man hier im Forum findet, findet man (zum Glück) kaum in der Realität (Berufsleben), da dies - wie du es schon richtig erkannt hast - unwartbar ist, wenn es mehr als 1 Mensch verstehen muss.



  • Strontium schrieb:

    Um einen Container zu erweitern, kann man in C++ auch eine freie Funktion nutzen.
    Das ist schneller, besser etc.
    Es ist einfach mehr C++-like und man sollte sich in der Programmierung schon der Sprache anpassen.

    Genau!
    Und am besten noch mit viel Polycies, Typelisten, SFINAE und was die Sprache sonst noch hergibt.

    Ehm, ja? 😃
    Schau dir mal das Design der STL an.
    OK, Typelisten (bzw. Variadics) braucht man vielleicht nicht immer und SFINAE auch nur für Traits oder ähnliches, aber wenn man komplett generischen Code schreiben will, braucht man das schon.
    (Dinge wie ThreadingPolicy oder OnErrorPolicy sind aber wirklich ein wenig zu viel, ich finde irgendwo sollte man auch das Design der Bibliothek gehen.

    CRTP aber besser nicht, sonst haben wir ja wieder Vererbung.

    Vererbung bei Containern ist schlecht vs Vererbung ist schlecht und sollte nie gemacht werden.
    Man kann auch zwischen den Extremen leben...
    :p

    Jeder Member sollte auch noch mindestens, sagen wir mal 20 Templateparameter unterstützen. Man kann ja nie wissen.

    OK, jetzt wird es albern.



  • Vererbung != Polymorphie


Anmelden zum Antworten