It is possible to do that using variant type. I have done it as below:

property DocumentElementChildNodes[Index1: Variant] : TPXMLNode read getChildNode; default;

function TPXMLNode.getChildNode(Index1 : Variant): TPXMLNode;
begin
  Result := nil;
  if assigned(Self) and assigned(FChildNodes) then
    if (varType(Index1) = varString) or (varType(Index1) = varUString) then
    begin
      if (IndexOf(Index1) = -1) then
        if FAutoCreateChildren then
          result := TPXmlNode(self.addchild(Index1))
        else
          result := nil
      else
        Result := TPXMLNode( FChildNodes.objects[IndexOf(Index1)]);
    end
    else
      Result := TPXMLNode(FChildNodes.objects[Index1]);
end;

Regards

Marcus Rocha.




Em 20/06/2019 14:57, Ryan Joseph escreveu:
I just had some plans for a cool JSON class thwarted because apparently [] 
properties don’t allow overloading of the parameters. Can we allow multiple 
default properties as long as their parameters are different? I know there’s 
not overloading of property names but at least the parameters could be 
overloadable so the correct property is chosen depending on what the args are.

type
   TMyClass = class
     function GetValueWithInt(index: integer): TValue;
     function GetValueWithString(index: string): TValue;
     property IndexI[index: integer]: TValue read GetValueWithInt; default;
     property IndexS[index: string]: TValue read GetValueWithString; default;
   end;

o := c[index]; // IndexI wins
o := c[‘key’]; // IndexS wins

Regards,
        Ryan Joseph

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to