[delphi] Untyped const vraagje

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Ik probeer weer eens wat uit de .NET wereld in Delphi (7) na te bootsen, niet omdat het zoooo handig is, maar puur voor de fun en om te kijken of het überhaupt kan. Ik wilde een set methoden maken in een TLogFile class die er zo uit zien:

Delphi:
1
2
3
4
function Writeln(const S: string): string; overload;
function Writeln(const S: string; Args: array of const): string; overload;
function Writeln(const S: string; const Arg1): string; overload;
function Writeln(const S: string; const Arg1, Arg2): string; overload;
In ieder van die methodes (behalve de eerste) wilde ik een call naar de Format functie doen om de string S geformatteerd naar de logfile te schrijven. Let op de laatste twee methoden: die parameters hebben geen type en dat is an sich niet fout (ff voor de mensen die het euvel gevonden denken te hebben).

:? Het probleem:
De eerste twee zijn uiteraard prima gelukt, maar de andere twee krijg ik niet aan de praat. Die Arg1 en Arg2 kan ik niet aan een array of const meegeven, omdat de compiler dan onmiddelijk zegt Bad argument type in variable type array constructor. Prima, kan ik inkomen, want array of const is iets varianterigs. Maar helaas, Arg1 en Arg2 declareren als Variant geeft bij de call naar Format een EConvertError, waarschijnlijk omdat bij die call VarType() van Arg1 en Arg2 dan varUnknown is...

:? De vraag:
Kan dit eigenlijk wel, en hoe dan?

日本!🎌


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 26-05 11:18

alienfruit

the alien you never expected

Hmm. C# is vreselijk ondersteund niet eens standaard parameter waardes! Slecht he? of niet :)

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
in C# zou je de untyped parameters declareren als "object", waar alle klasses van inheriten en waarnaartoe valuetypes geboxed kunnen worden. In die zin is C# (.NET dus eigenlijk) wel briljant, en dat wilde in in Delphi ook voor mekaar proberen te krijgen...

[ Voor 4% gewijzigd door _Thanatos_ op 25-01-2004 16:10 ]

日本!🎌


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 26-05 11:18

alienfruit

the alien you never expected

Nee, dat is gewoon een algemene .NET feature, ondersteuning voor default parameters zit ook in CLS. Alleen C# ondersteunt het niet, vind ik zelf wel jammer. Zodoende krijg je dus een bulk met functies zoals je ziet in .NET. :(

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
oh default parameters als in "void doiets(int i = 0);"... maar wat heeft dat met mijn vraag te maken?

日本!🎌


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

'array of const' kan alleen bij ordinal values en niet bij array's.

een enkele
Delphi:
1
function Writeln(const S: string; Value: Variant = unassigned): string;

is niet genoeg?

We adore chaos because we like to restore order - M.C. Escher


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Ja prima, maar hoe geeft ik die dan door aan de Format functie? Het probleem was nml juist dat een Variant dan varUnknoen is en dus een EConvertError oplevert...

日本!🎌


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

tja, dan wordt het lastig. Je zou zelf de parameter naar een reeks van ordinals kunnen omzetten als het een array is.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1