Autor Beitrag
Fetze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65
Erhaltene Danke: 1



BeitragVerfasst: Di 06.11.07 22:18 
Heyho,

da es möglich ist, Namespaces und Typen per Using-Direktive neue Namen zu geben (using Clr = Fetze.Color), hat sich mir die Frage gestellt, ob bzw. wie sich das auch mit Variablentypen ralisieren lässt?

Ich habe folgendes Grundproblem: Ich entwickle gerade an einem kleinen Utility-Framework, das unter anderem auch Vektoroperationen drin haben soll. Zugunsten der Performance würde ich gerne bei float-Operationen verbleiben, kann jedoch nicht ausschließen, dass ich die Vektoren auch mal in double- oder sogar decimal-Präzision brauchen könnte. Ein generischer Vektortyp wäre aber wiederum mit Spatzen auf Kanonen geschossen, weil ich mit Sicherheit sagen kann, dass alle anderen Variablentypen mit Vektoren eifnach keinen Sinn ergeben würden - und ich trotzdem eine Menge Zusatz-Schreibarbeit / Aufwand hätte.

Ferner wäre ich gerne in der Lage, für gesamte Typen oder Codefiles entweder per präprozessor-Direktive oder Typlokaler Konstante definieren zu können, auf welcher Variablenebene gearbeitet wird, also beispielsweise mit welcher Präzision.

Wie stellt man das am besten an? "using pVal = float;" funktioniert beispielsweise nicht.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 06.11.07 23:46 
Also so etwas?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
#if float
  using Scalar = Single;
#endif
  struct Vector2
  {
    Scalar x1, x2;

    [...]
  }

Willst du allerdings zwei verschiedene "Varianten" des Typs gleichzeitig nutzen, müsstest in Ermangelung einer Include-Direktive die Codedatei wohl von Hand kopieren, damit die Klasse auch wirklich zweimal kompiliert wird (natürlich unter verschiedenen Namen, das kann man am Besten auch noch in die ifs hängen).
Fetze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65
Erhaltene Danke: 1



BeitragVerfasst: Mi 07.11.07 14:11 
Genau das funktioniert ja nicht. Ich erhalte folgenden Compiler-Error:

Zitat:

Fehler 1 Der Typ- oder Namespacename "Float" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?) C:\Dokumente und Einstellungen\Fetze\Eigene Dateien\Visual Studio 2005\Projects\Fetze\Fetze.ZweiDe\Main.cs 12 14 Fetze.ZweiDe
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 07.11.07 18:58 
Schau dir mein Beispiel noch einmal genau an, suche vor Allem einmal nach "float" in ihm...
Verschiebst du deinen Code übrigens in eine Namespace-Declaration (was ich bei meinem Beispiel gemacht habe, ansonsten muss der gesamte Typenname System.Single angegeben werden), gebärdet sich der Compiler etwas nachvollziehbarer:
Zitat:
Identifier expected; 'float' is a keyword
Fetze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65
Erhaltene Danke: 1



BeitragVerfasst: Mi 07.11.07 21:04 
Wie soll ich das denn jetzt verstehen? Funktioniert diese Art der Zuweisung nur mit Single-Datentypen? Ich meine: Wieso funktioniert sie mit Float nicht, wenn sie mit Single funktioniert?

Im übrigen: Ich habe die using-Direktive sowohl außerhalb als auch innerhalb eines Namespaces ausprobiert. Und auch "deine" Fehlermeldung erhalten - aber sehr viel bringt mir das so nicht.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 08.11.07 14:26 
Es ist Compiler-Magic, die ist nicht immer begründbar ;) . Jeffrey Richter empfiehlt sowieso, die C#-Keywords der primitiven Typen gar nicht zu benutzen (muss aber nicht meine Meinung wiederspiegeln ^^ ). Benutze einfach den vollen CLR-Namen in der using-Direktive, dann kann nichts schiefgehen.
Fetze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65
Erhaltene Danke: 1



BeitragVerfasst: Do 08.11.07 18:43 
Okay, ich probiers - danke ^^