passing duck-typed objects and retaining full type information
    Jesse Phillips via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Wed Nov 12 19:34:10 PST 2014
    
    
  
On Tuesday, 11 November 2014 at 19:23:39 UTC, Adam Taylor wrote:
> Now what i want to do is pass some such "container" object to 
> an interface function:
>
> interface MyInterface
> {
> void filterCollisions(S)(S collisionCandidates)
>     if(canRemoveFromContainer!S)
> }
You can't. This is one of the major restrictions of the template 
approach. Generics in C# allow for this, which I believe is 
reliant its JIT compiler.
Once you introduce the need for a vTable (which interfaces do) it 
is no longer possible to require implementation of a "phantom" 
function. Templates don't exist until their use, so it is not 
possible to require an entry in the vTable when the number of 
possible combinations is infinite.
    
    
More information about the Digitalmars-d-learn
mailing list