绕过功能“输出”参数

时间:2013-07-31 04:20:08

标签: delphi

某些函数需要变量来发送值。但有时我不需要该值,也不想定义变量以将其用作函数out参数。像这样:

procedure test(out SomeVar: string);
begin
   //...
end;

我想安全地执行此操作:

test; 

3 个答案:

答案 0 :(得分:5)

您可以创建一个包装器:

procedure test(); overload;
var
    SomeVar : string;
begin
    test(SomeVar);
end;

注意:您还必须使用overload标记其他版本,或者您可以将您的包装内容称为test以外的其他内容,然后移除overload

另一种选择:在某处声明一个虚拟变量(可能在你的单元顶部):

var 
  DummyStr : string;

然后,每次要调用函数时都不必声明新变量。

test(DummyStr);

答案 1 :(得分:3)

您可以重载该过程:

procedure test(out SomeVar: string); overload;
begin
   //...
end;

procedure test; overload; inline;
var dummy: string;
begin
  test(dummy);
end;

请注意自Delphi 2005 AFAIR以来可用的inline关键字。

我通常做的是使用指针而不是out参数:

procedure test(SomeVarP: PString=nil); 
begin
   if SomeVarP<>nil then
     SomeVarP^ := ....
end;

因此你可以使用:

var s: string;

test;
test(@s);

答案 2 :(得分:2)

使用指针:

procedure test(SomeVar: PString = nil);
begin
  if SomeVal <> nil then SomeVar^ := '';
  //...
  if SomeVal <> nil then SomeVar^ := ...;
end;

test; 

var
  s: string;

test(@s);