作为 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 不是可以在其中一个数组上使用的参数类型。
最佳答案
简短回答:否。
长答案:您要求的是编译器以某种方式知道您希望将本质上无类型的参数强制转换为您想要的类型。编译器在调用站点没有足够的信息来做出决定。如果您添加“显式”运算符,然后将参数显式转换为字符串,那么它将起作用。
关于delphi - Delphi 中重载记录的隐式转换作为 const 数组中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7287605/