比如
type //定义各类型的数组类型
 TAryInt=array of Integer;
 TArySingle=array of Single;有个函数实现将数组存为字符串
saveAry2Str(ary:TAryInt):String;
begin
  for i:=0 to length(ary)-1 do
  result:=result+intToStr(ary[i]);  //***** intTostr
end;saveAry2Str(ary:TArySingle):String;
begin
 //与saveAry2Str(ary:TAryInt):String; 相似,只是类型转换***** floatTostr
end;我想实现的是:
如何动态根据数组的类型,用一个函数就可以实现上面的转换因为还有AryReal,AryDouble.. ,但只有类型转换那句不同,而其它都是相同的。
虽然重载是可以,但总觉得也麻烦。谢谢

解决方案 »

  1.   

    试下用variant型,转换用VarToStr
      

  2.   

    谢谢2位不过用variant或olevariant的话length(ary) 这样会类型匹配错误,像原来数组可以用的High,Low()也不能用还有其它办法吗? 或是要怎么实现类型判断?
      

  3.   

    呵呵,不错的问题。我用VTF来实现(Value Type FrameWork)
      

  4.   

    切记, 要统一,用接口。 举个简单例子吧以string 和 integer 为例通常我们会这样定义var
      MyString: string;
      MyInteger: integer;
     
    在VTF中这样来定义:  IString = interface
      ['{FA456008-EEB8-45AA-A2C9-92C9498BE0D7}']
        function GetTheString: string;
        property TheString: string read GetTheString;
      end;  IInteger = interface
      ['{FA456008-EEB8-45AA-A2C9-92C9498BE0D7}']
        function GetTheInteger: string;
        property TheInteger: string read GetTheInteger;
      end;var
      MyString: IString;
      MyInteger: IInteger;......
    function DoSomething(const AValueType: IInterface): Boolean;
    var
      Obj: IString;
    begin
      AValueType.QueryInterface(IString, Obj);
      if Obj <> nil then
      begin
        {Do Something For String}
      end;
    end;function DoSomething(const AValueType: IInterface): Boolean;
    var
      Obj: IInteger;
    begin
      AValueType.QueryInterface(IIn, Obj);
      if Obj <> nil then
      begin
        {Do Something For Integer}
      end;
    end;......在架构设计上提供统一接口  IMyWork = interface
      ['{EF2B908D-9B54-40CE-88E7-2B67B6660EB7}']
        function DoSomething(const AValueType: IInterface)
        ......
      end;至于如何去匹配DoSomething,那模式就多了去了。
      

  5.   

    VTF的核心思想就是把所有的值类型接口化。
      

  6.   

    谢谢各位 特别是老冯
    第1回听说VTF,有空再认真学学
    结帖