Handle to some object, call its methods
Anonymous via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jul 15 19:55:11 PDT 2014
On Tuesday, 15 July 2014 at 17:06:14 UTC, Ali Çehreli wrote:
> On 07/15/2014 09:39 AM, Anonymous wrote:
>
> > struct Subscription {
> > const Object handle;
> > private immutable size_t index;
> > @disable this();
> > private this(Object o, size_t i) {
> > handle = o;
> > index = i;
> > }
> > }
> >
> > I'd like this to be constructed with a handle to some object,
> and some
> > other details. The source would create and return the
> Subscriptions, and
> > the reader would call the object's const methods through the
> handle. The
> > const "read" methods would take the Subscription as one of
> the arguments.
>
> Object is too general for that. Normally, you would define an
> interface and use that:
>
> interface Reader
> {
> int read() const;
> }
>
> struct Subscription {
> const Reader reader;
> private immutable size_t index;
> @disable this();
> private this(Reader r, size_t i) {
> reader = r;
> index = i;
> }
> }
>
> class ConstantReader(int value) : Reader
> {
> int read() const
> {
> return value;
> }
> }
>
> void main()
> {
> auto sub = Subscription(new ConstantReader!42(), 0);
> assert(sub.reader.read() == 42);
> }
>
> Further, if 'index' is the subscription index, usually there is
> no need for that as the Subscription objects can be iterated
> over in their container:
>
> Subscription[] subs;
> subs ~= Subscription(new ConstantReader!42(), 0);
>
> foreach (sub; subs) {
> sub.reader.read();
> }
>
> Ali
Thanks, that adapted well.
More information about the Digitalmars-d-learn
mailing list