[fpc-devel] "Default" discussion for SmartPointers etc

Maciej Izak hnb.code at gmail.com
Wed Jul 27 21:04:24 CEST 2016


2016-07-27 15:33 GMT+02:00 Jonas Maebe <jonas.maebe at elis.ugent.be>:

> It would seem better to me that you do have to add something after your
> proxy object (specify a field, call a method, use proxyobject[x], ...)  to
> get the proxied value. Just like with a class, where "instance" by itself
> can never refer to the default property (it's always "instance[x]").


In that case SmartPtr/SmartObj/Nullable type has no sense for me. The basic
purpose is excluded. You can do that today by using for example
proxyobject._.foo();

To get rid of @@/@@@ we can use typecast + new type kind. With "proxy"
type, Sven proposition has more sense:

=== code begin ===
{$MODE DELPHI}

type
  TRawSomeSmart<T> = record
  private
    Instance: T;
    ... // normal record
  end;

  TSomeSmart<T> = proxy to TRawSomeSmart<T>.Instance;

var
  ptr: pointer;
  // PTypeInfo(TypeInfo(ni)).Kind = tkProxy
  ni: TSomeSmart<Integer>;
  np: TSomeSmart<TProcedure>;
begin
  ptr := @ni; // pointer to ni.Instance
  ptr := @TSomeSmart<Integer>(ni); // pointer to ni

  ptr := @@np; // pointer to np.Instance
  ptr := @np   // pointer to procedure
  ptr := @TSomeSmart<TProcedure>(np); // pointer to np
end;
=== code end ===

-- 
Best regards,
Maciej Izak
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20160727/da657986/attachment.html>


More information about the fpc-devel mailing list