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.