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...

Reply via email to