Delphi 中重载记录的隐式转换作为 const 数组中的参数

2023-12-07

作为 Delphi 7 转换的一部分,我们摆脱了 ShortString。我想让它尽可能轻松,所以我们认为我们可以将 ShortString 更改为一些以相同方式起作用的记录。这是它的声明方式(还有更多内容,但这是基本结构,概述了问题):

TShortStringRec = record 
private
  FStuff: array [0..49] of Char;
public
  class operator Implicit(AStuff: TShortStringRec): String;
  class operator Implicit(S1: String): TShortStringRec;
end;

这对于将字符串设置到记录非常有效。但还有类似的功能format其参数为const array of const的。有什么方法可以对我们想要传递给 const 数组的内容进行隐式转换吗?

function FunkyFunc : string;
var
  ssr : TShortStringRec;
begin
  ssr := 'Wall'; 
  result := format('Hello %s', [ssr]);  //<---error here
end;

编译时出现语法错误,因为 ssr 不是可以在其中一个数组上使用的参数类型。


简短回答: No.
长答案:您要求的是编译器以某种方式知道您希望将本质上无类型的参数强制转换为您想要的类型。编译器在调用站点没有足够的信息来做出决定。如果添加“显式”运算符,然后将参数显式转换为字符串,那么它将起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi 中重载记录的隐式转换作为 const 数组中的参数 的相关文章

随机推荐