Interface Limitations in D
Elmar
chrehme at gmx.de
Mon Sep 27 08:03:30 UTC 2021
On Monday, 20 September 2021 at 18:08:03 UTC, Alexandru Ermicioi
wrote:
> On Monday, 20 September 2021 at 13:24:50 UTC, Elmar wrote:
>> Providing default implementation support seems not more
>> difficult:
>>
>> ```D
>> mixin Interface!("MyInterface",
>> q{
>> static immutable PI = 3.141592f;
>> default static immutable CONSTANT = 0.0f;
>>
>> float toImplement(string s);
>>
>> default float isDefaulted()
>> {
>> return (CONSTANT ^^ PI) % toImplement(r"tau"));
>> }
>> });
>> ```
>>
>> Providing default method implementations without code
>> duplication and too much verbosity could work by defining the
>> default method implementations as **compile-time token
>> strings**. The above would generate
>
> You can actually try use mixin templates, not just mixin
> strings. See https://dlang.org/spec/template-mixin.html .
>
> It has nicer syntax although not as powerful as mixin strings.
> You can also mix in the template into a dedicated scope inside
> implementor of interface:
>
> ```
> mixin MyDefaultImpl!() myScope;
> ```
>
Yeah, using `mixin templates` is exactly the point of the code
snippet you have quoted, but together with string `mixin`s it
allows one to mimic syntax features. I do collect some language
features I'd like to see in D and if I ever should have enough
time, I'd prototype them with string mixins for others to try
them.
> I didn't try it, but you may be able to mimic default methods
> using this feature, in conjunction with alias this expression,
> although I'm pretty skeptic about this due to mangled name
> generation (i.e haven't tried it).
>
> So in your class you may try and explore whether this works:
>
> ```
> mixin MyDefaultImpl!() def;
>
> alias this def;
> ```
I've been using `alias this` in `mixin templates` recently.
According to Online D Editor, it works.
More information about the Digitalmars-d
mailing list