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
e.g.
template usesRanges( T : ForwardRange ){
...
}
usesRanges!(int) x;
LameExample.d: 243: Error int does not implement ForwardRange concept
Ranges.d: 12: head() not implemented
Ranges.d: 13: empty() not implemented
Ranges.d: 14: next() not implemented
Looking really quickly at http://en.wikipedia.org/wiki/C%2B%2B0x#Concepts I
think I'm probably thinking of what C++0x calls Concepts. I didn't read enough
to see if it's exactly what I'm thinking or just a close match. While every
template that uses forward ranges could make a messy criteria using if clauses
after the template, it may simply be too hard to read and too long to write.
The template above would work without any extra if criteria... Misuse of the
template will give cryptic compiler errors oddly reminiscent of STL...