Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Apr 29, 2024 14:03

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 83 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Mi Jan 01, 2014 15:04 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Zitat:
Ist sowas unter Delphi auch möglich? Ich habe unter Lazarus dies probiert.

Keine Ahnung. Auf jeden Fall schließe ich aus deinem Codebeispiel das du gar nicht verstanden hast, was "typedef" macht.
Mit Typedef kann man Typen unter anderen Namen verfügbar machen. Wenn ein Typname zb. weil es ein Template ist, besonders lang ist, kann man ihn mit einen Typedef einen neuen Namen geben und ihn damit direkt verwenden. In C++ können die Typenamen dank der Templates in einigen Fällen ziemlich lang werden. Besonders dann, wenn mit typetraits gearbeitet wird. Eine andere Möglichkeit der Typedefs ist es, Typen flexibler für Änderungen zu machen. Man kann zum Beispiel in einen zentralen Header ein "typedef float FltType" machen. Wenn man dann irgendwann gerne doch mit Gleitkommazahlen doppelter Genauigkeit rechnen will, braucht man nur "FltType" auf "double" umzudefinieren und der Type wird im ganzen Programm ersetzt. Das verwende ich sehr oft und kann sehr nützlich sein. Auch viele STL-Typen wie "std::size_t" oder "std::string" sind auf diese Weise definiert. Besonders Erster ist ja eigentlich so ziemlich der wichtigste Type überhaupt, wenn man es gescheit machen will.


Zuletzt geändert von OpenglerF am Do Jan 02, 2014 13:51, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 12:04 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
glAwesome hat geschrieben:
Code:
  1. typedef vecXX<3,float> vec3;

Bei C++ 11 hat man noch die folgende Alternative:
Code:
  1. using vec3 = vecXX<3, float>;

Ist Geschmackssache welche man nimmt.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 13:30 
Offline
DGL Member

Registriert: So Dez 29, 2013 12:38
Beiträge: 9
Programmiersprache: C++, C#
Lord Horazont hat geschrieben:
Code:
  1. procedure Foo(SomeClass: class of TComponent; SomeOwner: TComponent)
  2. var SomeInstance: TComponent;
  3. begin
  4.     SomeInstance := SomeClass.Create(SomeOwner);
  5.     // Do something with the instance
  6. end;


/*Hust*/
C#:
Code:
  1. void Foo(Type someClassType, Component someOwner)
  2. {
  3.     var someInstance = (Component)Activator.CreateInstance(someClassType, someOwner);
  4.     // Do something with the instance
  5. }
  6.  


oder

Code:
  1.  
  2. void Foo<TComponentType>(Component someOwner) where TComponentType:Component
  3. {
  4.     var someInstance = (Component)Activator.CreateInstance(typeof(TComponentType), someOwner);
  5.     // Do something with the instance
  6. }
  7.  


Sieht zwar nicht ganz so schick aus wie in Delphi, ist aber genau das selbe. ;-)

Viele Grüße,
Willi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 13:49 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Zitat:
Sieht zwar nicht ganz so schick aus wie in Delphi

Kommt wohl auf den Betrachter an. :wink:

Zitat:
Bei C++ 11 hat man noch die folgende Alternative [...]

In der Tat. Außer wenn man das Typedef selbst wieder "templatifizieren" möchte, dann muss man leider die neue Variante nehmen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 13:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Nein, es ist mit Template nicht das selbe, nur sehr ähnlich. Denn das Templateargument muss (so nehme ich auch in C# an; zumindest in C++ ist das so) ein konstanter Ausdruck zur Compiletime sein. Man kann also z.B. nicht einen Klassennamen aus einer Datei lesen, diese Klasse in einer Liste nachschlagen und damit dann eine Instanz konstruieren.

Man kann natürlich (besonders gut in C++11 mit std::function) eine Map von einem Key auf eine Funktion, die eine Objektinstanz zurückgibt, anlegen, das ist auch das, was ich derzeit tue; So richtig gut elegant finde ich das aber trotzdem nicht.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 14:06 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Zitat:
so nehme ich auch in C# an

In C# gibt es keine Templates, nur Generics.
Die Taugen hauptsächlich für typsichere Container, das war es dann aber auch schon.
Es sind nur Typen als Parameter möglich und wenn auf Methoden der Typen zugegriffen werden soll, müssen diese in einer abstrakten Basisklasse/Interface definiert sein.
Dadurch erübrigt sich die Frage danach, ob es ein konstanter zur Compilezeit feststehender Wert ist.

Das entscheidende an Templates ist, dass sie zur Compilezeit aufgelöst werden. Das ist zum einen deutlich schneller als so Dynamisches wie "Type.CreateInstance" und zum anderen deutlich sicherer. Deiner "Foo" Funktion könnte man irgendeinen beliebigen Typ übergeben und man würde erst zur Laufzeit den Fehler bekommen, dass die Funktion mit den Typen überhaupt nichts anfangen kann.

Reflection ist eine nette Sache, die wiederrum definitiv in C++ vollkommen fehlt(Sowohl zur Lauf- als auch zur Compilezeit), aber etwas total Anderes als Templates.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 14:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Nein kann man nicht. class of TComponent ist Typesafe, wenn du keine Typecasts machst, kannst du da nur eine Klasse reinreichen, die von TComponent erbt. Du kannst auch nur auf den Konstruktor zugreifen, der in TComponent definiert ist (der ist virtual und wird von den ableitenden Klassen überschrieben, sodass dann der Konstruktor der entsprechenden Subklasse aufgerufen wird). Das ist zur Compiletime schon abgesichert, dass das alles existiert, solange man halt nicht nil oder was ungültig getypecastetes reingibt, aber das gilt immer.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 15:07 
Offline
DGL Member

Registriert: So Dez 29, 2013 12:38
Beiträge: 9
Programmiersprache: C++, C#
Ok, stimmt. Sorry, das wusste ich nicht mehr. (Meine Delphizeit ist schon zulange her :-) Bin privat mit C++ und in der Firma mit C#\VB .NET unterwegs)

Viele Grüße
Willi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 17:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Das was Horazont meint nennt sich Polymorphie und hat nichts mit Generics und Templates zu tun. Das hat man in allen OOP Sprachen und C++ ist hier nur besonders unhandlich :)

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 18:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
@DGL Member

Wen ich dich richtig verstanden habe, ist dies im Code unten mit C++ auch möglich ?

Code:
  1. #version 330
  2. in vec4 Color;     // interpolierte Farbe vom Vertexshader
  3. out vec4 outColor; // ausgegebene Farbe
  4.  
  5. vec3 Farbe;
  6. vec4 Farbe4;
  7.  
  8. void main(void)
  9. {
  10.   Farbe = vec3(0.0, 1.0, 0.0);
  11.   outColor = Color;
  12.   outColor = vec4(vec3(1.0, 0.0, 0.0), 1.0);
  13.   outColor = vec4(Farbe, 1.0);
  14.   Farbe.r = 1.0;
  15.   Farbe.g = 1.0;
  16.   Farbe.b = 0.5;
  17.   Farbe4.a = 1.0;
  18.   Farbe.x = 1.0;
  19.   outColor = vec4(vec3(vec2(Farbe.r, Farbe.g), Farbe.b), 1.0);
  20.   outColor = vec4(vec2(Farbe.r, Farbe.g), Farbe.b, 1.0);
  21.   outColor = vec4(0.5, vec2(Farbe.r, Farbe.g), Farbe4.a);
  22. }        

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 18:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
DGL Member sind wir ja alle irgendwie, daher fühle ich mich einfach mal angesprochen.

Alles, was du in der main()-Funktion stehen hast, könntest du so auch in C++ schreiben, wenn du die Vektorklasse(n) mit entsprechenden Konstruktoren ausgestattet hast. Aber der Rest sieht mir nach einem Missverständnis aus: Die Direktive #version sowie die Schlüsselwörter in und out kennt C++ nicht. C++ ist auch kein Ersatz für GLSL, man kann damit keine Shader programmieren (jedenfalls nicht mit gewöhnlichen Mitteln). Durch ihre hohe Anpassbarkeit kannst du in der Programmiersprache jedoch Code schreiben, der aussieht, als wäre es GLSL. Die CPU macht ja immer noch einiges an Geometrie-Berechnungen und mit entsprechend definierten Klassen für Vektoren, Matrizen usw. ist das Programmieren der Funktionen dafür genau so bequem, wie das Programmieren von Shadern.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 18:44 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Zitat:
C++ ist hier nur besonders unhandlich

Warum findest du C++ hier besonders unhandlich?
Abgesehen davon das C++ als einzige zur Debatte stehenden Sprache echte Mehrfachvererbung anbietet, sehe ich gerade keinen wirklichen Unterschiede bei dem Sprachfeature zu anderen Sprachen.

Zitat:
Wen ich dich richtig verstanden habe, ist dies im Code unten mit C++ auch möglich ?

Nein, das stimmt so nicht ganz.
Was glAwesome meinte, ist, dass man in C++ Code schreiben kann, der fast so aussieht/funktioniert wie in GLSL.
Zum Beispiel kann man sich eben eine "vecN"-Struktur erstellen und die Operatoren überladen.
Code:
  1.  
  2. vec3 Test0 = [...];
  3. vec3 Test1 = [...];
  4. vec3 Test2 = Test0 + Test1;
  5.  

Dieser Code kann GLSL sein, könnte in C++ genauso aussehen und funktionieren.
In Java keine Change.
Da sähe es eher so aus: (Oder vergleichbar)
Code:
  1.  
  2. vec3 Test0 = [...];
  3. vec3 Test1 = [...];
  4. vec3 Test2 = new vec3(Test0);
  5. Test2.Add(Test1);
  6.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 19:40 
Offline
DGL Member

Registriert: So Dez 29, 2013 12:38
Beiträge: 9
Programmiersprache: C++, C#
yunharla hat geschrieben:
Das was Horazont meint nennt sich Polymorphie und hat nichts mit Generics und Templates zu tun. Das hat man in allen OOP Sprachen und C++ ist hier nur besonders unhandlich :)


In gewisser weise schon, aber in C++, C#, Java, etc. gibt es nun mal keine virtuellen Konstruktoren, die so benutzen kann, wie in Delphi.

Schließe mich OpenglerF an: Warum findest du, yunharla, das C++ in Sachen Polymorphie (Also Klassenvererbung) besonders unhandlich ist?

Grüße
Willi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Do Jan 02, 2014 23:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Willi95 hat geschrieben:
Warum findest du, yunharla, das C++ in Sachen Polymorphie (Also Klassenvererbung) besonders unhandlich ist?


Code:
  1.  
  2. @interface ObjectA : Object
  3.  -(void) dostuff;//wenn Object dostuff kennt gibts nen Fehler
  4. @end
  5.  
  6. @interface ObjectB : Object
  7. -(void) dostuff;//wenn Object dostuff kennt gibts nen Fehler
  8. @end
  9. ...
  10. void objDoStuff(Object obj) {
  11.   if(![obj respondsTo:"dostuff"])
  12.      return;
  13.   [obj dostuff];
  14. }
  15.  


noch fragen?

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Welche Sprache ist Zeitgemäss
BeitragVerfasst: Fr Jan 03, 2014 08:08 
Offline
DGL Member

Registriert: So Dez 29, 2013 12:38
Beiträge: 9
Programmiersprache: C++, C#
yunharla hat geschrieben:
Code:
  1.  
  2. @interface ObjectA : Object
  3.  -(void) dostuff;//wenn Object dostuff kennt gibts nen Fehler
  4. @end
  5.  
  6. @interface ObjectB : Object
  7. -(void) dostuff;//wenn Object dostuff kennt gibts nen Fehler
  8. @end
  9. ...
  10. void objDoStuff(Object obj) {
  11.   if(![obj respondsTo:"dostuff"])
  12.      return;
  13.   [obj dostuff];
  14. }
  15.  


noch fragen?


DAS da ist KEIN C++. Ich hab ehrlich gesagt keine Ahnung was das sein soll. Sieht für mich wie Objective C aus.

Code:
  1.  
  2. class CUsefulClass : public CBaseClass
  3. {
  4.   public:
  5.     CUsefulClass();
  6.     ~CUsefulClass();
  7.  
  8.     bool UsefulFunction(int nNumber);
  9.  
  10.   private:
  11.     int m_nNumber;
  12. };
  13.  


So sieht ne Klassendefinition in C++ aus.

Grüße
Willi


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 83 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 23 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.058s | 17 Queries | GZIP : On ]