如何创建函数/过程的别名?

lok*_*oki 10 delphi alias function

在Delphi中有一种方法可以将过程声明为另一个过程的别名吗?就像是:

function AnAliasToUpperCase(const S: AnsiString): AnsiString = system.AnsiStrings.UpperCase;  
Run Code Online (Sandbox Code Playgroud)

然后在程序中调用AnAliasToUpperCaseUpperCase必须完全相同.

Vic*_*ria 31

定义它,例如像一个恒定的声明:

const
  AliasToUpperCase: function(const S: AnsiString): AnsiString = System.AnsiStrings.UpperCase;
Run Code Online (Sandbox Code Playgroud)

可能适合您的需求.

  • 整齐.可以很好地用于C头翻译.下次必须考虑. (4认同)

Ste*_*nke 5

对"如何为函数/过程建立别名"这一问题的正确答案是"你不能".

但有两种解决方法可以模拟这种情况,这两种方法都可能会引入一些开销 - 第一种是另一种答案所示的const.

除了将其声明为const之外,您还可以将其声明为新的内联例程:

function AliasToUpperCase(const S: AnsiString): AnsiString; inline;
begin
  Result := System.AnsiStrings.UpperCase(S);
end;
Run Code Online (Sandbox Code Playgroud)

但是,您依赖于内联的编译器设置,并且还需要将该AnsiStrings单元添加到您呼叫的任何位置,AliasToUpperCase否则您将收到H2443 Inline function has not been expanded because unit is not specified in USES list警告.

对于此函数签名,它可以工作,但对于其他返回类型,您可能会遇到缺少返回值优化并具有额外值副本.