A pattern I'd like to see more of - Parsing template parameter tuples

Jacob Carlborg doob at me.com
Mon May 21 14:07:45 UTC 2018


On Monday, 21 May 2018 at 00:13:26 UTC, Ethan wrote:
> Code for context: 
> https://github.com/GooberMan/binderoo/blob/master/binderoo_client/d/src/binderoo/util/enumoptions.d
>
> Something struck me at DConf. I was watching the dxml talk and 
> hearing about all these things that weren't being implemented 
> for one reason or another. And I was thinking, "But what if I 
> want those things?" Being D, it'd be pretty easy to opt in to 
> them with template parameters and static if controlling what 
> code gets executed at runtime.
>
> But that brings up a bit of an annoying thing. Namely, the old 
> school way of doing such things:
>
> class SomeObject( bool option1, bool option2, Flags iHateBools 
> = Flags.Default, int 
> ohIDontWantThisToBeDefaultedButRefactoringSucks = -1 )
> {
> }
>
> Pretty obnoxious design pattern.
>
> But we're in D. We can do much better. It makes sense to do the 
> following:
>
> class SomeObject( LooseOptions... )
> {
> }

Unless I'm missing something we can do a lot better in D :

struct Options
{
     bool foo;
     bool bar;
     int a;
     string b;
}

class SomeObject(Options options)
{
     static if (options.foo)
     {
     }
}

No magic templates or anything fancy.

--
/Jacob Carlborg


More information about the Digitalmars-d mailing list