On Tuesday, 16 June 2020 at 15:50:07 UTC, jmh530 wrote:
On Tuesday, 16 June 2020 at 13:31:49 UTC, Atila Neves wrote:
[snip]

Pretty cool, thanks for the fixups.

It may make for a good documentation example, in that it may help make clear that you need to pass the module in somehow when dealing with non-member functions (AFAICT). You could include a comment about how it would be different if it were split into separate files.

Good point.


In your original example, is there any issue if we then make transform a templated non-member function that is generic over types like Adder (maybe there is an enum hasAddableMember that is true for Adder and false for Plus1)?

I was going to say "it should work" but instead I wrote the code and... it does. It all falls out of how UFCS works and usual language rules.

https://github.com/atilaneves/tardy/blob/feb26282608081098134c8846be87d398772ccb0/tests/ut/polymorphic.d#L102
https://github.com/atilaneves/tardy/blob/feb26282608081098134c8846be87d398772ccb0/tests/modules/ufcs/template_.d


Am I right that the shared static constructor in vtable means that there is one vtable for all the instances?

All instances of the same concrete type share the same vtable pointer, yes. Originally I built the vtable on the spot with `new` and assigned to each function pointer but then I realised that was a waste of time and allocations - the vtable is unique per concrete type.

Are there any technical issues preventing Polymorphism from accepting a class in addition to an interface?

None. It could even accept a struct, really.


Reply via email to