一个关于过程类型的问题:
type
  TCompareFunc = function (aData1,aData2:pointer):integer;//定义一个函数类型
//下面定义若干函数,上面定义的函数类型指向下列函数
 function CompareNullStr(aData1, aData2:pointer):integer;
 function CompareLongint(aData1, aData2 : pointer) : integer;
//函数实现部分
function TDCompareLongint(aData1, aData2 : pointer) : integer;
var
  L1 : longint absolute aData1;
  L2 : longint absolute aData2;
begin
  if (L1 < L2) then
    Result := -1
  else if (L1 = L2) then
    Result := 0
  else
    Result := 1
end;function TDCompareNullStr(aData1, aData2 : pointer) : integer;
begin
  Result := StrComp(PAnsiChar(aData1), PAnsiChar(aData2));
end;
现在问题来了:我要在一个比较例程中把该函数类型作为参数使用,比如:procedure ShakeSort(aList:TList;aFirst,aLast:integer;aCompare:TMyCompareFunc);
var
  i,j:integer;
  Temp:pointer;
begin
   while (aFirst < aLast) do
     begin
       {完成一趟冒泡排序}
       for i:= aLast downto succ(aFirst) do
         if (aCompare(aList.List^[i],aList^[i-1])< 0 )  then
           begin
             Temp:= aList.List^[i];
             aList.List^[i]:= aList.List^[i-1];
             aList.List^[i-1]:= Temp;
           end;
       inc(aFirst);
       for i:= succ(aFirst) to aLast  do
         if (aCompare(aList.List^[i],aList.List^[i-1])<0) then//@@
           begin
             Temp:= aList.List^[i];
             aList.List^[i]:= aList.List^[i-1];
             aList.List^[i-1]:= Temp;
           end;
       dec(aLast);
  end;
end;
此时,@@ 传入的参数是指针类型,在函数类型调用比较函数的时候怎样确定该调用哪个比较函数?

解决方案 »

  1.   

    能不能解释的清楚些?困惑ing!
      

  2.   

    procedure ShakeSort(aList:TList;aFirst,aLast:integer;aCompare,//bCompare//:TMyCompareFunc);
      

  3.   

    不知道直接传函数行不,如不行这样:
    var
      TempFunc1,TempFunc1:TMyCompareFunc;
    begin
      ...
      @TempFunc1:=@CompareNullStr;
      @TempFunc2:=@CompareLongint;
      procedure ShakeSort (aList,aFirst,aLast,TempFunc1,TempFunc2);
      ....
    end;