Any chance to call Tango as Extended Standard Library
Steven Schveighoffer
schveiguy at yahoo.com
Mon Jan 19 07:25:10 PST 2009
"Jason House" wrote
> Andrei Alexandrescu wrote:
>
>> I'd be curious to find out more about a runtime queryable struct
>> interface. How would it work? What idioms would it enable?
>
> I don't know what Lars is thinking of, but I think of struct interfaces as
> a non-polymorphic / compile-time inheritance. AKA, you can have a struct
> implement it, but you can't cast it to a base struct/interface. Outside
> of defining the struct, I'd expect it to only be usable in templates and
> is-expressions
I would expect a struct interface to be castable to the interface.
Otherwise, you get no benefit from having it. You can already use
compile-time interfaces with concepts and templates.
The issue then becomes to make a struct interface act the same as a class
interface. Unfortunately, a class interface value only contains a vtable
pointer (I think), which contains the offset to get to the actual class
pointer. If the class pointer was passed with the interface, this would be
much easier, but might be slower when doing class interfaces (passing 2
pointers instead of 1).
You could put an interface vtable pointer at the beginning of a struct,
which then makes every struct carry that extra baggage. And then a virtual
call is required, but would allow much more dynamic behavior.
You could build a temporary interface "structure" which does the thunk to
point to the real struct, since you don't have to deal with possible
inheritance, to avoid putting a vtable in the struct.
There are probably other ways.
In any case, having struct interfaces probably is not the best method for
ranges, where you would be doing a virtual call over and over again. But it
would be hugely beneficial for things like non-templated I/O, or
serialization.
One problem to consider is that it is much easier for a struct to escape
it's scope, so you may have to require a scope parameter to pass a struct as
an interface.
-Steve
More information about the Digitalmars-d
mailing list