RomanTim
1. Assign - это метод наследников TPersistent. А у меня структура.
2. Даже если я использую этот метод, это не будет перегружать присваивание.
Я хочу, чтобы когда в коде встречается выражение A := B, то вызывалась бы моя функция. Так же, как я это могу сделать на C++. Как я понимаю, даже если метод Assign написан, он не будет вызываться в этом контексте. Или я неправ?
vshersh
Ах, коллега...
OdesitVadim
Вы, видимо, не прочитали оригинальный (мой) реквест. Перегружать арифметические операторы я умею, спасибо большое. Вопрос в том, как перегрузить оператор присваивания. Его нет в списке разрешенных к перегрузу:
The following table shows the Delphi operators that can be overloaded:
[more]Implicit
Conversion
Implicit(a : type) : resultType;
implicit typecast
Explicit
Conversion
Explicit(a: type) : resultType;
explicit typecast
Negative
Unary
Negative(a: type) : resultType;
-
Positive
Unary
Positive(a: type): resultType;
+
Inc
Unary
Inc(a: type) : resultType;
Inc
Dec
Unary
Dec(a: type): resultType
Dec
LogicalNot
Unary
LogicalNot(a: type): resultType;
not
BitwiseNot
Unary
BitwiseNot(a: type): resultType;
not
Trunc
Unary
Trunc(a: type): resultType;
Trunc
Round
Unary
Round(a: type): resultType;
Round
Equal
Comparison
Equal(a: type; b: type) : Boolean;
=
NotEqual
Comparison
NotEqual(a: type; b: type): Boolean;
<>
GreaterThan
Comparison
GreaterThan(a: type; b: type) Boolean;
>
GreaterThanOrEqual
Comparison
GreaterThanOrEqual(a: type; b: type): resultType;
>=
LessThan
Comparison
LessThan(a: type; b: type): resultType;
<
LessThanOrEqual
Comparison
LessThanOrEqual(a: type; b: type): resultType;
<=
Add
Binary
Add(a: type; b: type): resultType;
+
Subtract
Binary
Subtract(a: type; b: type) : resultType;
-
Multiply
Binary
Multiply(a: type; b: type) : resultType;
*
Divide
Binary
Divide(a: type; b: type) : resultType;
/
IntDivide
Binary
IntDivide(a: type; b: type): resultType;
div
Modulus
Binary
Modulus(a: type; b: type): resultType;
mod
ShiftLeft
Binary
ShiftLeft(a: type; b: type): resultType;
shl
ShiftRight
Binary
ShiftRight(a: type; b: type): resultType;
shr
LogicalAnd
Binary
LogicalAnd(a: type; b: type): resultType;
and
LogicalOr
Binary
LogicalOr(a: type; b: type): resultType;
or
LogicalXor
Binary
LogicalXor(a: type; b: type): resultType;
xor
BitwiseAnd
Binary
BitwiseAnd(a: type; b: type): resultType;
and
BitwiseOr
Binary
BitwiseOr(a: type; b: type): resultType;
or
BitwiseXor
Binary
BitwiseXor(a: type; b: type): resultType;
xor
No operators other than those listed in the table may be defined on a class or record.[/more]
1. Assign - это метод наследников TPersistent. А у меня структура.
2. Даже если я использую этот метод, это не будет перегружать присваивание.
Я хочу, чтобы когда в коде встречается выражение A := B, то вызывалась бы моя функция. Так же, как я это могу сделать на C++. Как я понимаю, даже если метод Assign написан, он не будет вызываться в этом контексте. Или я неправ?
vshersh
Ах, коллега...
OdesitVadim
Вы, видимо, не прочитали оригинальный (мой) реквест. Перегружать арифметические операторы я умею, спасибо большое. Вопрос в том, как перегрузить оператор присваивания. Его нет в списке разрешенных к перегрузу:
The following table shows the Delphi operators that can be overloaded:
[more]Implicit
Conversion
Implicit(a : type) : resultType;
implicit typecast
Explicit
Conversion
Explicit(a: type) : resultType;
explicit typecast
Negative
Unary
Negative(a: type) : resultType;
-
Positive
Unary
Positive(a: type): resultType;
+
Inc
Unary
Inc(a: type) : resultType;
Inc
Dec
Unary
Dec(a: type): resultType
Dec
LogicalNot
Unary
LogicalNot(a: type): resultType;
not
BitwiseNot
Unary
BitwiseNot(a: type): resultType;
not
Trunc
Unary
Trunc(a: type): resultType;
Trunc
Round
Unary
Round(a: type): resultType;
Round
Equal
Comparison
Equal(a: type; b: type) : Boolean;
=
NotEqual
Comparison
NotEqual(a: type; b: type): Boolean;
<>
GreaterThan
Comparison
GreaterThan(a: type; b: type) Boolean;
>
GreaterThanOrEqual
Comparison
GreaterThanOrEqual(a: type; b: type): resultType;
>=
LessThan
Comparison
LessThan(a: type; b: type): resultType;
<
LessThanOrEqual
Comparison
LessThanOrEqual(a: type; b: type): resultType;
<=
Add
Binary
Add(a: type; b: type): resultType;
+
Subtract
Binary
Subtract(a: type; b: type) : resultType;
-
Multiply
Binary
Multiply(a: type; b: type) : resultType;
*
Divide
Binary
Divide(a: type; b: type) : resultType;
/
IntDivide
Binary
IntDivide(a: type; b: type): resultType;
div
Modulus
Binary
Modulus(a: type; b: type): resultType;
mod
ShiftLeft
Binary
ShiftLeft(a: type; b: type): resultType;
shl
ShiftRight
Binary
ShiftRight(a: type; b: type): resultType;
shr
LogicalAnd
Binary
LogicalAnd(a: type; b: type): resultType;
and
LogicalOr
Binary
LogicalOr(a: type; b: type): resultType;
or
LogicalXor
Binary
LogicalXor(a: type; b: type): resultType;
xor
BitwiseAnd
Binary
BitwiseAnd(a: type; b: type): resultType;
and
BitwiseOr
Binary
BitwiseOr(a: type; b: type): resultType;
or
BitwiseXor
Binary
BitwiseXor(a: type; b: type): resultType;
xor
No operators other than those listed in the table may be defined on a class or record.[/more]