New library: open multi-methods

Jean-Louis Leroy via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Wed Jul 19 08:56:06 PDT 2017


On Wednesday, 19 July 2017 at 15:33:28 UTC, jmh530 wrote:
> On Wednesday, 19 July 2017 at 13:46:24 UTC, Jean-Louis Leroy 
> wrote:
>>>
>>> What if you do:
>>>
>>> shared static this(){
>>>
>>>   mixin(registerMethods);
>>>
>>> }
>>
>> You mean in openmethods.d?
>
> Yes. I haven't tried something like that, but it seems like a 
> use case for either static this or shared static this.
>
> https://dlang.org/spec/class.html#StaticConstructor
> https://dlang.org/spec/class.html#SharedStaticConstructor

Among other things, the mixin introduces two functions in the 
module's scope: the function the user actually calls (the 
"dispatcher"). E.g. it creates a times(double, Matrix) when it 
sees a times(double, virtual!Matrix). It also declares a 
"discriminator" function which is used to locate which method the 
specializations (the @method funcs) relates to (it has to deal 
with overloads - there are two "times" methods). This has to be 
done for every module that contains method declarations 
(virtual!) or implementations (@method). That's why it has to be 
a string mixin (at least until we have static foreach) and be 
called in the matrix etc modules, not in module openmethods.



More information about the Digitalmars-d-announce mailing list