Ja... und?
Der Link sollte dem Verständnis helfen wenn man sich schon über Generics ausläßt...
Ja... und?
Nun, im Gegensatz zu dir kenne ich mich offenbar mit Java Generics UND C++ Templates ausDer Link sollte dem Verständnis helfen wenn man sich schon über Generics ausläßt...
Nun, im Gegensatz zu dir kenne ich mich offenbar mit Java Generics UND C++ Templates aus
Im Bytecode bleibt von den Generics letztendlich nix übrig, und schon regt man sich als C++ Entwickler auf, beispielsweise über fehlende Spezialisierung oder die Unmöglichkeit neue Instanzen eines Types anzulegen. Die Workarounds für diese Probleme sind einfach nur abgrundtief hässlich.
Nein, das Thema war, ob es sich lohnt, C++ zu lernen, insbesondere für einen Javaentwickler, die Antwort darauf lautet immer noch definitivNa, das Thema war doch, was C++ einem Java Entwickler bieten kann. Templates wären dann etwas
Diese Antwort impliziert, dass es durchaus Leute gibt, die sogar in einigen Sprachen mehr als nur zwei fit sind aber die, die sich hier so hervorheben, gehören mit Sicherheit nicht dazu, zumindest nicht so lange, wie sie Java-Generics mit C++-Templates vergleichen, sie sind nicht das selbe und funktionieren anders. Was man dabei als gut oder weniger gut empfindet, ist Gewohnheitssache.NEIN, C wäre angebrachter. Wenn's dich dennoch interessiert, dann tu dir keinen Zwang an, aber bring' nichts durcheinander.
Hmmm... schon mal nachgesehen welchen Stellenwert .NET ab Windows 8 hat?Demnächst wird also .NET/C# angesagt sein bei uns, auf diese Umstellung bin ich optimistisch gespannt. Zum Ausgangsthema: eine andere Progr.Sprache zu lernen, kann meines Erachtens nur Vorteile haben. Das Zeitaufwand/Nützlichkeit-Verhältnis muss jeder für seinen Bereich selber bestimmen.
Hmmm... schon mal nachgesehen welchen Stellenwert .NET ab Windows 8 hat?
Hmmm... schon mal nachgesehen welchen Stellenwert .NET ab Windows 8 hat?
Ja, gerade eben . So wie ich das nun verstanden habe, gibt es dann .NET, Silverlight und eine dritte Sache namens WindowsRT (runtime), was zwar gewissermassen ähnlich zu .NET ist, aber doch nicht wirklich kompatibel ist. Wieso gibt es denn nun eine dritte Sache, anstatt .NET einfach Metro-tauglich zu machen?
Olli
Extrem einseitige "Antwort", die davon ausgeht, dass man nur noch das in C macht, was in Java absolut nicht geht. Java ist aber OOP, da ist es ganz angenehm, auf "der anderen Seite" ebenfalls eine OOP Sprache zu haben. Und ich habe schon _etliche_ Java zu C bzw C++ Brücken bauen müssen....die Antwort darauf lautet immer noch definitiv...
Natürlich sind sie nicht das selbe. Sonst wären ja Java Generics so gut wie C++ Templates. Die grundsätzliche Intention ist aber in beiden Fällen die gleiche, und da stinken die Java Generics eben gegen C++ Templates ab.Diese Antwort impliziert, dass es durchaus Leute gibt, die sogar in einigen Sprachen mehr als nur zwei fit sind aber die, die sich hier so hervorheben, gehören mit Sicherheit nicht dazu, zumindest nicht so lange, wie sie Java-Generics mit C++-Templates vergleichen, sie sind nicht das selbe und funktionieren anders.
Was ist daran "Gewohnheitssache", wenn das hier:Was man dabei als gut oder weniger gut empfindet, ist Gewohnheitssache.
T t = new T();
Yeah, Flamewar. Was sind denn die entsprechenden Vorteile?(Obwohl, mir werden entsprechende Vorteile ehrlich gesagt zunehmend Gleichgültiger)..
Diese Aussage beweist abermals, dass du von C++ leider keine Ahnung hast und daher nix weiter schreiben solltest. Das schöne an C++ ist doch, dass ich NICHT gezwungen bin, mich um die Speicherverwaltung selbst zu kümmern (dank Smartpointer, RAII oder wenn ich will auch ein GC), ich in Java aber dazu GEZWUNGEN bin darauf zu verzichten, mit all den unangenehmen Nachteilen. Nicht missverstehen, ein GC ist eine feine Sache und in 98% aller Fälle ein super Werkzeug. Nimmt den Leuten das Denken ab1. Destruktoren: Wären ein Anzeichen dafür, dass man sich um die Speicherverwaltung selber kümmern muss. Das ist in Java nicht nötig.
Zum Beispiel? Sicher, alles hat Tücken, aber nenn mir doch mal ein paar für die Templates. Würde mich jetzt (ganz ehrlich) interessieren, welche konkret dir in den Sinn kommen. Abgesehen davon würde ich Templates nicht als "Hilfsmittel", sondern als elementaren Bestandteil von C++ bezeichnen. Während es bei Java eher etwas Wischiwaschi ist, zur Laufzeit sowieso. Und wieder nicht missverstehen: Ich nutze ja ebenfalls viel Java und auch viel die Generics. Aber wie unbrauchbar die Java Generics für anspruchsvollere Aufgaben zu sein scheinen sieht man ja schon Java-eigenen APIs. JavaFX beispielsweise... Ich habe eine BooleanProperty, eine IntegerProperty, eine StringProperty ... WTF? Mit echten Templates, Templatespezialisierung (und vielleicht auch der viel gescholtenen Mehrfachvererbung) ließe sich das wesentlich eleganter umsetzen.2. Generics->Templates: Beide Hilfsmittel haben in ihren jeweiligen Sprachen ihre eigenen Tücken.
Und das ist schade. Denn ob du's jetzt glaubst oder nicht: Ich arbeite viel und durchaus auch gern in Java. Aber es ist eben häufig auch zum Haare ausraufen, wenn man gewisse Dinge einfach unglaublich umständlich angehen muss.
Für den Copyconstructor ist eigentlich keine besondere Vorgehensweise nötig, da das zu kopierende Objekt ja sowieso const übergeben wird, also nicht veränderbar ist. Ob es Sinn macht ist eine andere Frage, da du ja sowieso nur eine identische nicht veränderbare Kopie bekommst. Der Zuweisungsoperator muss aber natürlich private sein oder aber in C++11 einfach gelöscht werden. Ansonsten gelten natürlich noch die gleichen Regeln wie auch in Java.Wie handhabe ich den Zuweisungsoperator & Copy Constructor, wenn ich Immutables haben will?
Ich meine nicht const wenn ich immutable sage, sondern eben die Unveränderlichkeit der Objekte auf Klassenebene festzulegen.
Gilt das nicht für das meiste hier diskutierte?Aber ehrlich... hätte das eine kurze Google Suche nicht auch zu Tage gebracht?
Falls Du auf P/Invoke anspielst - das genau so ein Aufwand wie JNI. Du hast zumindest noch den Vorteil das VS automatisch Assemblys erstellt um ggf. externe COM/Ax zu verwenden. Wenn Du aber direkt Windows-API Aufrufe machen willst, dann ist eine entsprechen Wrapper-Library mit C++/CLI einfacher. Wobei Du hier richtig aufpassen musst. Der GC verschiebt und die API hat noch den alten Pointer. Wie schön das Knallt und beim Debuggen funktioniert es komischer weise - weil der GC gerade mal nicht verschiebt :toll:Als dritten Punkt erhoffe ich eine bessere Verzahnung mit Windows,[...]
jain - bei Klassen ja, einzelnen Methoden nein. Vorallem erzeugt er von jedem Typ entsprechend Code. Wenn Du also auf eine Template Methode 200 Typen anwendest, dann hast Du den (fast) identischen Code 200x da -.-aber die Templates(erzeugt da der Compiler nicht Klassen?)
Nun, das stimmt so nicht wirklich. Moderne C++ Compiler optimieren bei Templates ja deutlich besser als noch vor 12 Jahren. In den allermeisten Fällen ist es ja so, dass ein Template nicht unerheblichen Code enthält, der bei jeder Instanz gleich sein würde. Je größer das Template, desto mehr in der Regel. Und da kann ein Compiler gut ansetzen und muss diesen Code nicht 200x erzeugen. Die "Angst" vor dem Code bloat ist im praktischen Umfeld absolut unerheblich. Und mal ehrlich, auf wieviele verschiedene Typen wendest du in einer durchschnittlichen Software ein Template an? 200 sinds ja eher selten. Und selbst wenn, das Binary wird dadurch nicht dutzende MB größer.Wenn Du also auf eine Template Methode 200 Typen anwendest, dann hast Du den (fast) identischen Code 200x da -.-