Как объявлена функция Concat

Ghost Writer
Дата: 01.08.2019 22:05:47
Возможно ли сделать свою функцию с синтаксисом, подобным синтаксису функции Concat ?
из справки Delphi 7
Delphi syntax:
function Concat(s1 [, s2,..., sn]: string): string;

[array of const] не то, тут без скобок []. просто интересно.

скрин из лазаруса
Dimitry Sibiryakov
Дата: 02.08.2019 00:11:29

Нет, это магия компилятора.

PS: Нет, слабодокументированное слово varargs тут не поможет.

Posted via ActualForum NNTP Server 1.5

x77
Дата: 02.08.2019 03:57:15
ну, можно.

function Concat(s1: string): string; overload;
function Concat(s1, s2: string): string; overload;
function Concat(s1, s2, s3: string): string; overload;
(и тут Остапа понесло...)

все это запихать в отдельный юнит, и дальше, из основной программы, вы сможете вызывать функцию Concat с любім кол-вом параметров, не превішающих те, что вы не поленилилсь прописать в том самом грешном юните.
alekcvp
Дата: 02.08.2019 11:59:06
+ Элитные грабли с доставкой
program xe2concat;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  TRake = function (Count: Integer): string; cdecl varargs;

function Concat(Count: Integer; Params: Pointer): string; cdecl;
var
  Items: array [0..31] of PChar absolute Params;
  Index: Integer;
begin
  Result := '';
  for Index := 0 to Count - 1 do
    Result := Result + Items[Index];
end;

var
  Text: string;
begin
  ReportMemoryLeaksOnShutdown := True;
  try
    Text := TRake(@Concat)(5, 'раз', 'два', 'три', 'пять', 'шесть');
    WriteLn(Text);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  ReadLn;
end.

Только сегодня специальный бонус каждому покупателю: необъятное поле возможностей выстрелить себе в ногу уже в комплекте!
wolverin
Дата: 02.08.2019 12:05:17
Ghost Writer,

function Concat(s1: array of string): string;

Concat(['раз','двас', 'стопицот']);
DimaBr
Дата: 02.08.2019 12:21:43
wolverin
Ghost Writer,

function Concat(s1: array of string): string;

Concat(['раз','двас', 'стопицот']);


Вы бы хоть ТС почитали

Ghost Writer
[array of const] не то, тут без скобок []. просто интересно.
wolverin
Дата: 02.08.2019 12:24:30
DimaBr,

ну я так и подумал - в объявлении без скобок )
DimaBr
Дата: 02.08.2019 12:26:44
wolverin
DimaBr,
ну я так и подумал - в объявлении без скобок )

И после этого мне кто-то говорит, что другие невнимательно читают.
wolverin
Дата: 02.08.2019 12:47:44
DimaBr
И после этого мне кто-то говорит, что другие невнимательно читают.

разве я сказал что я не другие? ))
да и подобие самое подобное, не обязательно же const, можно же наверное и указатели передать, все лучше чем предложенное alekcvp
alekcvp
Дата: 02.08.2019 12:50:52
wolverin
все лучше чем предложенное

В ТЗ было "без скобок" - я сделал "без скобок", а что ТЗ кривое с точки зрения возможностей языка, так это не ко мне. За что уплочено - то и получено (С)