How do I define implicit conversion operators for mutually dependent records?

前端 未结 2 1713
小鲜肉
小鲜肉 2020-12-17 16:19

I am using the operator overloading for records in Delphi 2006. (Please don\'t answer this question by telling me not to.)

I have two record types with the impli

2条回答
  •  一向
    一向 (楼主)
    2020-12-17 16:58

    You might be able to do this with record helpers.

    Below is what I recently did to work around the impossibility of having a forward record record declaration.

    It uses the record helper construct, which - like implicit type casts - have drawbacks too.
    The most important one being that only the nearest record helper for a particular record type will apply.

    type
      TIpv4Address = record
      strict private
        FAddress: TIpv4Quad;
        FMask: TIpv4Quad;
      private
        class function CreateInternal(const IP_ADDR_STRING: _IP_ADDR_STRING): TIpv4Address; static;
      public
        class function Create(const IP_ADDR_STRING: _IP_ADDR_STRING): TIpv4Address; static;
        class function Count(const IP_ADDR_STRING: _IP_ADDR_STRING): Integer; static;
        property Address: TIpv4Quad read FAddress;
        property Mask: TIpv4Quad read FMask;
      end;
    
      TIpv4AddressList = array of TIpv4Address;
    
      TIpv4AddressHelper = record helper for TIpv4Address
        class function CreateList(const IP_ADDR_STRING: _IP_ADDR_STRING): TIpv4AddressList; static;
      end;
    

    You use it like this:

    function TAdapterInfo.GetIpAddressList: TIpv4AddressList;
    begin
      Result := TIpv4Address.CreateList(AdapterInfos.IP_ADAPTER_INFO[Index].IpAddressList);
    end;
    

    --jeroen

提交回复
热议问题