Hello dsimcha,

== Quote from Andrei Alexandrescu (seewebsiteforem...@erdani.org)'s
article

On 8/30/10 20:04 PDT, dsimcha wrote:

I've been toying for a long time with the idea of a std.mixins for
Phobos that would contain meta-implementations of commonly needed
boilerplate code for mixing into classes and and structs.  I've
started to prototype it
(http://dsource.org/projects/scrapple/browser/trunk/std_mixins/std_m
ixins.d). So far I have a mixin for struct comparisons, which is
useful if you need a total ordering for use with sorting or binary
trees, but don't care exactly how that ordering is defined.  I've
also got a mixin that converts a class to a Singleton, and uses
thread-safe but efficient mechanisms to deal with the __gshared
singleton case.

Upon a second look I think the Singleton implementation is not up to
snuff and reflects a common misunderstanding of the pattern.
The point of the Singleton is that you can instantiate it with a
derived
class. Otherwise, it's the less interesting Monostate pattern. The
code
as is right now uses hardcoded calls to new, and it shouldn't.
Andrei
Interersting.  The Wikipedia examples don't seem to allow this.  Can
you elaborate?  How would the class know when to use which derived
class?


A proposed API:

template Singleton(T, string name, bool populate = true, D = T) {
bool SetOrDie(U, A...)(A a);
T SetOrGet(U, A...)(A a);
T Set(U, A...)(A a);
T Get();
}
void SingletonClearAll();

useage:

alias Singleton!(Foo, "bar") foo;

foo.Get().Whatever();
foo.SetOrGet!(FooSub)().Whatever(); // same as get
foo.Set!(FooSub)();  // over write

SingletonClearAll();

foo.SetOrGet!(FooSub)(); // same as set

foo.SetOrDie!(FooSub)(); // already set;

foo.



--
... <IXOYE><



Reply via email to