假设我有一个记录TQuaternion和一个记录TVector。四元数有一些带有TVector参数的方法。另一方面,TVector支持某些具有TQuaternion参数的操作。

知道Delphi(Win32)不允许前向记录声明,我该如何优雅地解决呢?

在这里,实际上不是选择使用类,因为在这种罕见的情况下,我真的想使用运算符重载,在这种情况下它确实很有意义。

现在,我只是将这些特定的方法从记录中移出,并移到了单独的函数中,这是很好的老式方法。我们欢迎更好的建议。

最佳答案

如果操作员不是实际问题,则可以使用记录助手来解决。

type
  TVector = record
  end;

  TQuaternion = record
    procedure UseVector(var V: TVector);
  end;

  TVectorHelper = record helper for TVector
    procedure UseQuaternion(var Q: TQuaternion);
  end;


这将仅解决循环依赖关系,并且不适用于运算符。它还具有一个缺点,即您不能拥有TVector的任何其他记录助手,至少它们两者不能在同一位置使用。

10-05 22:13