2

改良版のクイックソートで単体テストを行っています。
(うまくいけば) より高速なバージョンは、次を使用して実装されます。

TArrayHelper = class helper for System.Generics.Collections.TArray
....
   class procedure Sort<T>(var Values: array of T); overload; static;
   class procedure Sort<T>(var Values: array of T; Comparer: IComparer<T>); overload; static;
....

今のところ、テスト目的で の名前Sortをに変更できることはわかっていますが、ある時点でメソッド名を に修正する必要があります。 SortNewsort

スコープ内にクラス ヘルパーがある場合、元のメソッドを呼び出すにはどうすればよいですか?

rtti またはその他のラウンドアバウト メソッドを使用する方法はありますか?

4

1 に答える 1

2

純粋な Pascal コードでこれを実現する唯一の方法はSort、クラス ヘルパーがアクティブでないスコープから呼び出すことだと思います。ポイントは、クラス ヘルパーがアクティブな場合、Sortヘルパー内のメソッドを参照することです。

たとえば、次のようにします。

unit ScopeBuster;

interface;

uses
  System.Generics.Collections;

type
  TArrayScopeBuster = class
    class procedure Sort<T>(...); overload; inline; static;
  end;

implementation

class procedure TArrayScopeBuster.Sort<T>(...); 
begin
  TArray.Sort(...);
end;

end.
于 2015-06-15T12:20:21.730 に答える