I want to make the type of record that uses dynamic arrays.
Using the variables A and B of this type I want to be able to perform operations A: = B (and other) and be able to modify the content of A without modification B like in snipped code below:
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)
There are two problems:
to avoid problem 1) I want to overload assign operator using:
class operator TMyRec.Implicit(source: TMyRec): TMyRec;
but compilator (Delphi XE) says:
[DCC Error] : E2521 Operator 'Implicit' must take one 'TMyRec' type in parameter or result type
How to resolve this problems. I read several similar posts on stackoverflow but they don't work (if I understood they well) on my situation.
Artik
Overloading the assignment operator (operator=) is fairly straightforward, with one specific caveat that we'll get to. The assignment operator must be overloaded as a member function. This will call f1. operator=(f1), and under the simplistic implementation above, all of the members will be assigned to themselves.
Assignment Operators Overloading in C++ You can overload the assignment operator (=) just as you can other operators and it can be used to create an object just like the copy constructor. Following example explains how an assignment operator can be overloaded.
Overload assignment is an assignment for extra pay in excess of the normal assignment of a full- time unit member.
Operators. Operators behave like predefined functions that are part of the Delphi language. For example, the expression (X + Y) is built from the variables X and Y , called operands, with the + operator; when X and Y represent integers or reals, (X + Y) returns their sum.
It is not possible to overload the assignment operator. This means that what you are attempting to do is not possible.
Edit: It is possible now - http://docwiki.embarcadero.com/RADStudio/Sydney/en/Custom_Managed_Records#The_Assign_Operator
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With