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

标签 delphi operator-overloading delphi-2009

作为 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/

相关文章:

c++ - 使用 vector 的内容初始化类对象

delphi - 如何强制预构建脚本在每次编译时运行

delphi - Delphi 2009 中的通用 TList<> 在 IndexOf 上崩溃

delphi - (Delphi) 从父级调用子级程序

c# - 为什么要在重载相等运算符时覆盖 GetHashCode 和 Equals?

json - SuperObject 序列化私有(private)变量而不是属性

java - Groovy 中的基本运算符重载

delphi - 如何在不修改给定单元的情况下禁用该单元的警告?

delphi - JSON 空数组

delphi - 如何在系统启动时启动android服务?