Eigene Operatoren definieren [gelöst: unmöglich]



  • v schrieb:

    und << vielleicht mit c++0x gar nicht mehr nötig wäre

    was hat das mit c++0x zu tun? gibts da iwas neues im bereich der op-überladung bzw der streams? oO



  • unskilled schrieb:

    v schrieb:

    und << vielleicht mit c++0x gar nicht mehr nötig wäre

    was hat das mit c++0x zu tun? gibts da iwas neues im bereich der op-überladung bzw der streams? oO

    variadic templates und perfect forwarding und cout.print(a,"+",b,"=",a+b) müßte eigentlich recht schmerzfrei sein.



  • volkard schrieb:

    Solche Überlegungen gibt es schon lange. Zum Beispiel http://www2.research.att.com/~bs/whitespace98.pdf
    Aber es gibt noch keine Standard-Lösung.
    Wenn irgend möglich verzichte auf den Wunsch.

    ... It was therefore decided that the "Max Munch" resolution was unsuitable for large-scale programming. Instead, it was decided to by default limit identifiers to a single character:

    int xy; // error: two-character identifier

    This may seems Draconian at first . However, since we now have the full Unicode character set available, we don't actually need hard-to-read long names. Such long names only make code obscure by causing unpleasantly long lines and unnatural line breaks. Multi-character names are a relic of languages that
    relied heavily on global name and encouraged overly-large scopes.

    👍 😃

    MfG SideWinder



  • SideWinder schrieb:

    👍 😃

    Der Grinskopf bekommt eins auf die Fresse? Lieber die Smilies vertauschen...



  • Ach ja, das alte Whitespace-Overloading Prank-Paper... 🙂



  • ok, dann bleibe ich eben doch bei funktionen 😃

    danke an alle,
    andi01.



  • andi01 schrieb:

    und ich weiß dass std::vector nicht der mathematische vektor ist, aber er eignet sich gut wenn man vorher nicht weiß wieviele einträge der mathematische vektor haben wird^^

    Er eignet sich aber nicht, um davon öffentlich zu erben.
    Ist zar ein anderes Thema, aber Deine Klasse sollte wenn einen std::vector 'haben' (nicht so tun als wär sie ein std::vector).
    Allerdings weiß ich auch nicht ob es Sinn macht, mathematische Vektoren mit unterschiedlichen Dimensionen den gleichen Typ haben zu lassen. A x B macht keinen Sinn, wenn A eine höhere Dimension hat als B, muss man also immer zur Laufzeit prüfen.
    Würde also eher machen

    template<typename T, size_t Dimension> 
    class Vector{ std::array<T, Dimension> elements; /* ... */ };
    
    template<typename T, size_t Dim> 
    T DotProduct(const Vector<T, Dim>& a, const Vector<T, Dim>& b)
    {
      for(size_t n = 0; n < Dim; ++n)
        result += a[n] + b[n];
      return result;
    }
    


  • Für mathematische Vektoren dynamischer Grösse könnte man sich auch das relativ unbekannte Klassentemplate std::valarray anschauen. Aber sicher nicht davon erben!



  • Ich kann mich nur Nexus anschließen.
    Die template klasse valarray die ist für mathematische vektor operationen.

    Edit:
    http://www.cplusplus.com/reference/std/valarray/



  • In Haskell und OCaml man beliebige Operatoren definieren...


Anmelden zum Antworten