I've built a sound.d module with lots data types, free functions (initAndOpenSound() loadSound()), and enums etc.

In my main/app.d module, I've created the the following associative array:

void main(string[] argv)
{
    initAndOpenSound();

    Track[string] tracks  =
    [
"SCRATCH" : Track("scratch.wav", Sound.SFX, ONCE, null ), "BACKGROUND_SOUND" : Track("beat.wav", Sound.MUSIC, FOREVER, null ), "HIGH" : Track("high.wav", Sound.SFX, ONCE, null )
    ];
        
    foreach(string s, Track t; tracks)
    {
        loadSound(t);   // sets ptr to a file with audio data
        tracks[s] = t;  // update associative array
    }


Everything works. But I know in the future, that the tracks is going to get very large.

So I want to get it out of main() and move it to the sound.d module. I've tried this but all hell breaks loose and I can't make just of the compiler errors


When I simply move the array out of main() but still in app.d, the compiler returns Error: expression ["SCRATCH":Track("scratch.wav", cast(Sound)1, 0, null),... is not a constant.

Can I use "static if" or "static this()", or "mixin" or some other technique?

Or do I need to refactor my code completely?



Reply via email to