On 24.08.2018 21:42, tide wrote:
Some problems require new features like how taking the address of a
member function without an object returns a function pointer, but
requires a delegate
That is indeed broken behavior (and I think there is a DIP to fix it),
but member function pointers are not really a necessary language feature.
where C++ has member function pointers, D just has
broken unusable code.
You can use a
T function(ref S, Args)
in place of a
T (S::*)(Args)
(for S a value type, otherwise you don't need the ref).
Then, instead of
auto mptr = &S::foo;
you write
auto mptr = (ref S s, Args args) => s.foo(args);
(This is a bit more typing, but it can be automated, such that you only
write getMPtr!(S.foo) or similar.)
instead of
s->*mptr(args)
you write
mptr(s, args)
The syntax is more obvious, it is more general, and at least some C++
compilers will do the same thing under the hood.