Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

11

10.08.2017, 09:50

Mal ganz ehrlich, egal ob C++11, C++14 oder C++17, die Sprache ist letzten Endes nur dein Werkzeug, das Dir die Aufgabe leichter oder schwerer macht. Um einiges wichtiger ist es zu lernen, wie man Software ordentlich konzipiert, die Architektur dahinter basierend auf den gestellten Anforderungen so anlegt, dass sie auch flexibel und zukunftssicher ist. Tut man das nicht bekommt man als Ergebnis, was sich so schön als Technical Debt bezeichnet, oder zu Deutsch, Altlasten. Der Sprachstandard kann Dir dabei das Leben nur schwerer oder einfacher machen. Modernes C++ zeichnet sich meiner Meinung nach also nicht nur durch den verwendeten Standard aus.
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

10.08.2017, 11:15

@Nimelrian danke für das interessante Beispiel - aber mal ganz häretisch gefragt: ist da nicht manches ein wenig overkill? Also z.B. hätte ich erwartet, dass man getRatings eher so implementiert (bin leider nicht mehr sooo fit in C++ und schon garnicht in den neuen Standards, daher bitte ich um Nachsicht und Aufklärung, falls das Folgende kompletter Quark ist ):

Für das Punkte Zusammenzählen hätte ich jetzt eher std::inner_product erwartet:

Aber vermutlich funktioniert das so garnicht. Am Ende fände ich aber folgendes fast noch "besser" - was ggf. altbacken ist, aber auch in Richtung von Thoran Aussage geht - am Ende zählt oft nicht wieviel moderne Mittel man verwendet, sondern wie gut es funktioniert und wartbar ist:

oder ganz klassisch:

Aber das Originalbeispiel zeigt schon eindrucksvoll, was mit der stl so zur Verfügung steht.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

13

10.08.2017, 18:27

Kennt irgendjemand eine gute Dokumentation zu allen Funktionen der C++ Standardlibrary.

Ich habe bis jetzt keine Gute gefunden.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

10.08.2017, 18:28

Was konkret stört dich z.B. an http://www.cplusplus.com/ ?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

15

10.08.2017, 19:09


Was konkret stört dich z.B. an http://www.cplusplus.com/ ?

Ich hätte gern eine Auflistung aller Funktionen, Templestts, Klassen die im namespace std enthalten ist. Auf http://www.cplusplus.com/ ist es nach Kategorien (Container, Iteratoren...) sortiert. Das stört mich, weil es mich verwirrt und ich mir nicht mehr sicher bin, was wie zusammenpasst.
Außerdem ist es nur C++11 und bei C++14 ist auch noch etwas dazugekommen.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

16

10.08.2017, 19:19

http://en.cppreference.com ist besser und moderner, unter http://en.cppreference.com/w/cpp/symbol_index kannst du dir alles angucken.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

17

10.08.2017, 21:39

@Nimelrian danke für das interessante Beispiel - aber mal ganz häretisch gefragt: ist da nicht manches ein wenig overkill? Also z.B. hätte ich erwartet, dass man getRatings eher so implementiert (bin leider nicht mehr sooo fit in C++ und schon garnicht in den neuen Standards, daher bitte ich um Nachsicht und Aufklärung, falls das Folgende kompletter Quark ist ):

Für das Punkte Zusammenzählen hätte ich jetzt eher std::inner_product erwartet:

Aber vermutlich funktioniert das so garnicht. Am Ende fände ich aber folgendes fast noch "besser" - was ggf. altbacken ist, aber auch in Richtung von Thoran Aussage geht - am Ende zählt oft nicht wieviel moderne Mittel man verwendet, sondern wie gut es funktioniert und wartbar ist:

oder ganz klassisch:

Aber das Originalbeispiel zeigt schon eindrucksvoll, was mit der stl so zur Verfügung steht.

Klar, man kann viel an dem Snippet verbessern. inner_product kannte ich zum Beispiel noch gar nicht. Mir ging es hauptsächlich darum zu zeigen, wie man mit der STL heutzutage schönen, lesbaren, generischen und wartbaren Code bauen kann.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

18

13.08.2017, 00:29

Ich finde manchmal, dass die STL dann doch ein wenig mit Kanonen auf Spatzen schießt. Es gibt für alle möglichen Fälle irgend eine template Funktion, was man allerdings auch schön in einer ganz normalen loop machen könnte. Wenn ich mir da vor allem mal std::transform anschaue, weiß ich nicht genau, worin jetzt der Vorteil zu einer ordinären loop sein soll. Überseh ich da was?
Anderes Beispiel ist da std::remove(_if). Das ist eigentlich so das beste Beispiel. Es tut eigentlich nicht das, was es sagt. Es sortiert lediglich die Elemente in der Range, es entfernt sie nicht. Das muss man außerhalb nochmal selbst tun.
Keine Ahnung wer sich das ausgedacht hat, aber schön ist es nicht.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

19

13.08.2017, 02:21

Ich finde manchmal, dass die STL dann doch ein wenig mit Kanonen auf Spatzen schießt. Es gibt für alle möglichen Fälle irgend eine template Funktion, was man allerdings auch schön in einer ganz normalen loop machen könnte. Wenn ich mir da vor allem mal std::transform anschaue, weiß ich nicht genau, worin jetzt der Vorteil zu einer ordinären loop sein soll. Überseh ich da was?
Anderes Beispiel ist da std::remove(_if). Das ist eigentlich so das beste Beispiel. Es tut eigentlich nicht das, was es sagt. Es sortiert lediglich die Elemente in der Range, es entfernt sie nicht. Das muss man außerhalb nochmal selbst tun.
Keine Ahnung wer sich das ausgedacht hat, aber schön ist es nicht.


Es geht bei sowas vor allem um Aussagekraft. Bei transform weiß ich sofort, dass jedes Element einer Range auf ein neues Element gemapped wird. Bei accumulate weiß ich, dass alle Elemente einer Range zu genutzt werden, um ein einzelnes Ergebnis zu bauen. Ein anderer, sehr cooler Algorithmus der STL ist übrigens stable_partition.

Die Funktionalität bzgl. remove(_if) ist leicht zu erklären. remove_if hat keine Ahnung vom Container, auf dem es operiert, der Algorithmus arbeitet ja nur mit Iteratoren. Wie genau Elemente in einem Container entfernt werden, funktioniert je nach Container unterschiedlich (Bei einer list z.B. anders als bei einem vector). Deswegen übergibst du ja den zurückgegebenen Iterator von remove_if an die erase-Funktion des Containers, denn die weiß, wie Elemente im Container gelöscht werden.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nimelrian« (13.08.2017, 02:27)


Tobiking

1x Rätselkönig

  • Private Nachricht senden

20

13.08.2017, 03:08


Es geht bei sowas vor allem um Aussagekraft. Bei transform weiß ich sofort, dass jedes Element einer Range auf ein neues Element gemapped wird. Bei accumulate weiß ich, dass alle Elemente einer Range zu genutzt werden, um ein einzelnes Ergebnis zu bauen. Ein anderer, sehr cooler Algorithmus der STL ist übrigens stable_partition.

Wenn man dabei noch konsequent pure functions einsetzt, bekommt man die Vorteile funktionaler Sprachen: geringere Fehleranfälligkeit und kostenlose Parallelisierung (scheinbar für C++17 geplant: http://www.modernescpp.com/index.php/par…emplate-library)

Werbeanzeige