I think I will dedicate tonight one or two hours to understand the first two proposals :-D.

On Thursday, 24 September 2020 at 13:28:25 UTC, WebFreak001 wrote:
[...]
Alternatively a lot easier would be to just return auto and do:

auto dt(alias fun, T)(Dot!T t){
        return t.dot(t => unaryFun!fun(t));
}

This doesn't allow users to overwrite the return type exactly but it simplifies implementation and doesn't look like it would generate any double instantiation.
[...]

Following your last recommendation, I included de auto version as a Dot(T) member:

auto d(alias fun)()
{
  return dot(a => unaryFun!fun(a));
}

And the syntax is really compact:


assert( dot(p).d!"a.father".d!"a.father".d!"a.name".d!"a.length".get(0) == 0);

assert( dot!Person(null).d!"a.father".d!"a.father".d!"a.father".d!"a.name".get == null);


Great help WebFreak001. Thank you very much !!!

Reply via email to