gpt4 book ai didi

delphi - 如何在Delphi中重载记录分配运算符

转载 作者:行者123 更新时间:2023-12-03 15:00:55 24 4
gpt4 key购买 nike

我想制作使用动态数组的记录类型。

使用这种类型的变量 A 和 B,我希望能够执行操作 A:= B (和其他),并且能够修改 A 的内容而不修改 B,如下面的代码片段所示:

    type
TMyRec = record
Inner_Array: array of double;
public
procedure SetSize(n: integer);
class operator Implicit(source: TMyRec): TMyRec;
end;

implementation

procedure TMyRec.SetSize(n: integer);
begin
SetLength(Inner_Array, n);
end;

class operator TMyRec.Implicit(source: TMyRec): TMyRec;
begin
//here I want to copy data from source to destination (A to B in my simple example below)
//but here is the compilator error
//[DCC Error] : E2521 Operator 'Implicit' must take one 'TMyRec' type in parameter or result type
end;


var
A, B: TMyRec;
begin
A.SetSize(2);
A.Inner_Array[1] := 1;
B := A;
A.Inner_Array[1] := 0;
//here are the same values inside A and B (they pointed the same inner memory)

有两个问题:

  1. 当我在 TMyRec 中不使用覆盖赋值运算符时,A:=B意味着 A 和 B(它们的 Inner_Array)指向相同的位置内存。
  2. 避免问题 1) 我想重载赋值运算符使用:

    类运算符 TMyRec.Implicit(来源:TMyRec):TMyRec;

但是编译器(Delphi XE)说:

[DCC 错误]:E2521 运算符“隐式”必须在参数或结果类型中采用一种“TMyRec”类型

如何解决这个问题。我在 stackoverflow 上读过几篇类似的文章,但它们对我的情况不起作用(如果我理解得很好的话)。

艺术

最佳答案

不可能重载赋值运算符。这意味着您尝试做的事情是不可能的。

<小时/>

编辑:现在可以了 - http://docwiki.embarcadero.com/RADStudio/Sydney/en/Custom_Managed_Records#The_Assign_Operator

关于delphi - 如何在Delphi中重载记录分配运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17979886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com