On Friday, 28 February 2014 at 13:42:21 UTC, Mike Parker wrote:
Consider this.

enum Foo {...}

interface Bar {}

struct BarManager {
   public static {
      void initialize();
      void terminate();
      ... more stuff
   }
}

This is my use-case. I don't want my users to have to refer to Foo or Bar with any sort of prefix except to avoid name-clashes. However, I want to logically group the functions to manage Bars under a single grouping. I don't need or want a Singleton for it. I could use free functions, but I use the initialize/terminate idiom a lot. As a user of my own library, it would be horribly annoying to have to fully qualify each call. Plus, now and again I have multiple "namespace structs" in a single module. If I see them as all being closely related, why should I split them off into different modules?

I'd write it this way:

=== something/bar.d ===

interface Bar {}

=== something/barmanager.d ===

import something.bar; // possibly public import

void initialize();
void terminate();

=== app.d ===

import something.bar;
import barmanager = something.barmanager;

// refer to Bar directly and to init function via barmanager.initialize()
=========

Or, even better, turn bar into package and have something.bar.manager with same usage pattern.

Reply via email to