動的配列を使用するタイプのレコードを作成したい。
このタイプの変数 A と B を使用して、操作 A: = B (およびその他) を実行できるようにし、以下の抜粋されたコードのように B を変更せずに A の内容を変更できるようにしたいと考えています。
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)
2 つの問題があります。
- TMyRec でオーバーライド代入演算子を使用しない場合、A:=B は A と B (それらの Inner_Array) がメモリ内の同じ場所を指していることを意味します。
問題を回避するために1)次を使用して割り当て演算子をオーバーロードしたい:
クラス演算子 TMyRec.Implicit(ソース: TMyRec): TMyRec;
しかし、コンパイラ(Delphi XE)は次のように述べています。
[DCC エラー] : E2521 演算子 'Implicit' は、パラメーターまたは結果の型で 1 つの 'TMyRec' 型を取る必要があります
この問題を解決する方法。私はstackoverflowでいくつかの同様の投稿を読みましたが、私の状況では(よく理解していれば)機能しません。
アートク