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