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();
writeln(myClass.doAndReturnSomething("Hello"));
}
Which compiles, runs, and prints nothing.
-Steve
More information about the Digitalmars-d-learn
mailing list