A better way to deal with overloading?
Profile Anaysis via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jan 25 16:02:03 PST 2017
Many times we pass compound types(non-primitives) as arguments to
functions.
e.g.,
void foo(T1 t1, T2 t2, T3, t3);
But to call foo with new variables we have to create the
arguments. This usually requires extra code to simply initialize
the variables. (imagine foo being a constructor).
It may be better to use a recursive process where we can specify
all the values of the arguments inline.
e.g.,
foo(|a,b,c|,|e|,|f,g,c|).
(I am using | but any type of symbolic notation could be used)
would be equivalent to
foo(T1(a,b,c),T2(e),T3(f,g,c)).
When the T's are structs(other wise maybe new, or we can imply
new for classes to make it uniform).
If T1 has a compound type for the 3rd parameter, we can then call
it like
foo(|a,b,|c1,c2,3||,|e|,|f,g,c|).
this avoids having to do things like
auto t1 = T1(a,b,new X(c1,c2,c3));
auto t2 = T2(e);
auto t3 = T3(f,g,c);
and then f(t1,t2,t3);
or other wise simply inline the above.
This also cuts down on constructor overloading.
This is sort of liked named parameters but the idea is that the
compiler simply constructs the type internally as it knows what
type to expect and the grouping symbols allow one to specify the
contents unambiguously.
More information about the Digitalmars-d
mailing list