ref?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Feb 15 13:25:24 PST 2009


Frits van Bommel wrote:
> Andrei Alexandrescu wrote:
>> Spot on. My ambitions are actually a tad higher. I want to
>> implement containers as by-value structs defining value semantics
>> and the needed primitives. Then, using introspection, I want to
>> define a template Class that takes a struct and turns it into a
>> class. For example:
>> 
>> struct SomeContainer(T) { ref T opIndex(size_t n) { ... } }
>> 
>> auto byval = SomeContainer!(int)(); auto javalike = new
>> Class!(SomeContainer!(int));
>> 
>> The type Class!(SomeContainer!(int)) will store a
>> SomeContainer!(int) object and will define (by using introspection)
>> a method opIndex of which implementation will do what the struct's
>> method does. The net effect is as if the programmer sat down with
>> SomeContainer and changed "struct" to "class". Of course without
>> the code duplication and the maintenance nightmare :o).
>> 
>> Class should work for primitive types, e.g. Class!(int) should do
>> what Integer does in Java and so on.
> 
> An interesting idea. Would Class!(T) allow polymorphism, or would all
>  methods be implicitly final?

Polymorphic. Then of course there's the Finalize!(C) template that takes
a class C and makes all of its methods final. Compile-time introspection
is a treasure trove.

> Would it also delegate template methods?

Good question. I don't know how template methods could be handled.

> And what would happen to any T methods accepting or returning T?
> Would they keep returning T or would they be replaced by Class!(T)?
> Or perhaps both, through overloading? Same question for types derived
> from T (e.g. Nullable!(T), or SomeContainer!(T))?

I don't know. We need more experience to figure that out.

> For instance in the case of a container it would be nice to allow 
> Class!(LinkedList!(T)).splice!(Class!(LinkedList!(T)) other) if
> there's a LinkedList!(T).splice(LinkedList(T) other).
> 
> If such unwrapping were done, how would such methods react if the 
> Class!(LinkedList!(T)) passed into slice() were null?

Segfault :o).


Andrei



More information about the Digitalmars-d mailing list