simple static if / traits question...
WhatMeForget via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Feb 22 21:00:45 PST 2017
On Wednesday, 22 February 2017 at 22:37:25 UTC, Profile Anaysis
wrote:
> On Wednesday, 22 February 2017 at 21:27:47 UTC, WhatMeWorry
> wrote:
>>
>>
>> I'm doing conditional compilation using static ifs like so:
>>
>> enum bool audio = true;
>>
>>
>>
>> // if audio flag is present and set to true, add to code build
>>
>> static if ( (__traits(compiles, audio)) && audio)
>> playSound(soundSys, BLEEP );
>>
>>
>> This works, but I thought there might be a simpler way. For
>> instance,
>> after perusing std.traits, I thought I would find something
>> like
>> isPresent(audio) or isSymbol(audio) templates.
>>
>> Or am I being obtuse here?
>>
>> Thanks.
>
> You do realize that audio is a compile time constant? This
> means that in the binary, everything that depends on it is
> evaluated(as it can be, since it is known). This means that
> whatever app you are using will not be able to be able to
> "adapt" to the system changes. In this case, if the system has
> audio there is no way for the binary to use it because you
> compiled it out(if audio = false).
>
> In such a case you do not want to use a static or compile time
> variable unless you plan on creating multiple binaries.
>
> If your example above was just for demo then yes, you can do
> that but compiles is not what you want. Compiles only checks if
> the statement that follows is compilable as valid D code and it
> doesn't have anything to do with the value of the variables.
>
Definitely overthought this one big time. But there is so much
meta goodness in std.traits that I felt compelled to use
"compiles" :)
>
> There are a few options:
>
> 1. static if(audio)
> 2. version(audio)
> 3. if (audio)
>
> It looks like you are trying to create the version(audio)
> semantic(if exists then use, else don't).
>
> Ultimately, though, if you are trying to make a binary that can
> either use audio or not depending on where it is ran, you'll
> have to stick to using actual run time variables and probably
> be a bit more organized about it.
option 1 is the one I was shooting for. does the static if
(audio) just check for the existence of audio, or does it also
check to see if audio is true as well?
I've got a game tutorial with 15 sequential projects. Each
project introduces a new concept by building on the previous
project code. But I soon had so much
code duplication that I decided to use common modules/functions.
The specific code could be injected via flags in the apps.d
Hence my original question.
More information about the Digitalmars-d-learn
mailing list