Deduplicating template reflection code

Stefan Koch via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Apr 14 01:51:04 PDT 2017


On Friday, 14 April 2017 at 08:24:00 UTC, Johannes Pfau wrote:
> I've got this code duplicated in quite some functions:
>
> ---------------------
> foreach (member; __traits(derivedMembers, API))
> {
>     // Guards against private members
>     static if (__traits(compiles, __traits(getMember, API, 
> member)))
>     {
>         static if (isSomeFunction!(__traits(getMember, API, 
> member))
>                 && !hasUDA!(__traits(getMember, API, member), 
> IgnoreUDA)
>                 && !isSpecialFunction!member)
>         {
>             alias overloads = MemberFunctionsTuple!(API, 
> member);
>
>             foreach (MethodType; overloads)
>             {
> 		// function dependent code here
>             }
>         }
>     }
> }
> --------------------
>
> What's the idiomatic way to refactor / reuse this code fragment?
>
> -- Johannes

The Idiomatic way would be to wrap it inside another template.

In a year or so you won't need to worry about template overhead 
anymore, (if I succeed that is :) )



More information about the Digitalmars-d-learn mailing list