Template functions inside interface

Steven Schveighoffer schveiguy at gmail.com
Tue Aug 4 15:14:21 UTC 2020

On 8/4/20 9:39 AM, Adam D. Ruppe wrote:
> On Tuesday, 4 August 2020 at 13:36:15 UTC, Zans wrote:
>> Is there any way to declare template functions inside interface and 
>> then override them in a class?
> No, the templates in the interface are automatically considered `final`. 
> So the body must be in the interface too to avoid that undefined 
> reference error.
> You can have them forward to normal methods in the interface though, 
> just there needs to be a fixed number of them with concrete types.

I was kind of surprised the compiler didn't complain about override 
there. Is override ever a valid attribute for a template function? Is 
there a reason we ignore it for templates?

I can imagine a lot of confusion for something like:

import std.stdio;

interface MyInterface
     T doAndReturnSomething(T)(T param){return T.init;}

class MyClass : MyInterface
     override T doAndReturnSomething(T)(T param)
         return param;

void main()
     MyInterface myClass = new MyClass();

Which compiles, runs, and prints nothing.


More information about the Digitalmars-d-learn mailing list