Для конкретного случая, когда требуется использовать перегрузку операторов (и, более конкретно, двоичные операторы), типы записей, с которыми вы работаете, могут быть указаны в любом порядке.
Приведенные ниже объявления позволят вам добавлять векторы и кватернионы (если это имеет смысл :-)) в любой комбинации (3-е объявление Add для TQuaternion является интересным):
type
TVector = record
class operator Add( v1, v2 : TVector ) : TVector;
end;
TQuaternion = record
class operator Add( q1, q2 : TQuaternion ) : TQuaternion;
class operator Add( q : TQuaternion; v : TVector ) : TQuaternion;
class operator Add( v : TVector; q : TQuaternion ) : TQuaternion;
end;
При условии объявления соответствующих переменных следующие все компиляции:
q1 := q2 + q3;
v1 := v2 + v3;
q1 := q2+v2;
q2 := v2+q2;
Этого достаточно, чтобы покрыть то, что вам нужно?