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

时间:2018-01-21 20:15:52

标签: function delphi alias

在Delphi中有一种方法可以将过程声明为另一个过程的别名吗? 类似的东西:

function AnAliasToUpperCase(const S: AnsiString): AnsiString = system.AnsiStrings.UpperCase;  

以及稍后调用AnAliasToUpperCaseUpperCase的程序必须完全相同。

2 个答案:

答案 0 :(得分:27)

定义它,例如像一个不变的宣言:

const
  AliasToUpperCase: function(const S: AnsiString): AnsiString = System.AnsiStrings.UpperCase;

可能适合您的需求。

答案 1 :(得分:5)

“如何为函数/过程创建别名”这个问题的正确答案是“你不能”。

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

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

function AliasToUpperCase(const S: AnsiString): AnsiString; inline;
begin
  Result := System.AnsiStrings.UpperCase(S);
end;

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

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