AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Typeinfo als Parameter

Ein Thema von hanspeter · begonnen am 6. Nov 2013 · letzter Beitrag vom 6. Nov 2013
Antwort Antwort
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Typeinfo als Parameter

  Alt 6. Nov 2013, 12:39
In diesem Projekt wird sehr viel mit records gearbeitet.
Diese enthalten Shortstrings (z.B. String[40]).
Solche Records werden dann in Memory und/oder Filestreams abgelegt.

Um von den Ansistrings wegzukommen probiere ich mehrere Möglichkeiten.
Das Problem haben wir auch. Finde ich schwach vom Emba, dass sie keinen UnicodeString[N] eingebaut haben. Das wäre für den Compilerbauer IMNSHO um einiges leichter zu implementieren gewesen und mit besserem Ergebnis als eine drangefrickelte Lösung von dir oder mir.

Das bedeutet aber, dass für jede vorhandene Stringlänge ein eigener Datentyp declariert werden muss.

String[22] -> Fixstring22
String[40] -> Fixstring40
String[128] -> Fixstring 128 ...
Macht doch nix - dass lässt sich doch mit Suchen und Ersetzen gut lösen.

Zitat:
FixStringXX
So weit war ich auch schon, aber leider sind da auch die Generics zu nix zu gebrauchen.
Und aus irgendwelchen Gründen wehren sich Alle gegen die Einführung von Makros, bzw. daß man Konstanten als "Parameter" in den Generics verwenden kann.
Delphi-Quellcode:
TFixString<Len> = record
  Value: array[0..Len-1] of Char;
  class operator implicit(const aValue: string): TFixString;
  class operator implicit(const aValue: TFixString): string;
end;
Da vermisse ich mal wieder C++ und Templates. Was in Delphi halbwegs als Ersatz geht, ist statt direkt der Größe einen Typ passender Größe zu übergeben:
Delphi-Quellcode:
TFixString<TMitPassenderLaenge: record> = record
  Value: array[0..SizeOf(TMitPassenderLaenge)-1] of Char; // Achtung: SizeOf liefert gelegentlich 0
  // oder
  Value: array[0..1] of TMitPassenderLaenge; // danach fleißig casten. :-(
end;
und
Delphi-Quellcode:
Str40 = string[40];
FixString40 = TFixString<Str40>;
oder
Delphi-Quellcode:
Arr40 = Array[0..39] of AnsiChar;
FixString40 = TFixString<Arr40>;
Nicht elegant, aber besser als nix.
Uli Gerhardt

Geändert von uligerhardt ( 6. Nov 2013 um 12:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.706 Beiträge
 
Delphi 12 Athens
 
#2

AW: Typeinfo als Parameter

  Alt 6. Nov 2013, 13:28
Sowas ginge auch, aber diese "brutalen" Castst machen keinen Spaß, vorallem Dank der massiven Bugs beim SizeOf. (dann lieber copy&paste)
Delphi-Quellcode:
TFixString<Arr> = record
  Value: Arr;
  class operator implicit(const aValue: string): TFixString;
  class operator implicit(const aValue: TFixString): string;
end;

//Arr40 = array[0..39] of WideChar;
//FixString40 = TFixString<Arr40>;
  FixString40 = TFixString<array[0..39] of WideChar>;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Nov 2013 um 13:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Typeinfo als Parameter

  Alt 6. Nov 2013, 13:38
Sowas ginge auch, aber diese "brutalen" Castst machen keinen Spaß, vorallem Dank der massiven Bugs beim SizeOf. (dann lieber copy&paste)
Mit Delphi macht DRY manchmal keinen Spaß.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz