On Thursday, 24 January 2013 at 16:49:53 UTC, Maxim Fomin wrote:
On Thursday, 24 January 2013 at 16:17:34 UTC, Era Scarecrow wrote:
Hmmm. You could separate the data and remove the pointer... then use alias this.

[code]
 struct Singleton {
   static SingletonData single;
   alias single this;
   @disable this(this);
   //disable copy/assignment? Not that it would matter...
   //copying nothing does nothing, as there's nothing here.

   private static struct SingletonData {
     //methods and data here.
   }
[/code]

I agree, but disabling ctors makes creating module-level object tricky. Static struct initialization might help.

I'll have to agree. But in that case don't disable the default ctor (not that the Singleton has any contents anyways); Actually opAssign/postblit only needs to be disabled inside SingletonData. I'd think that would work.

[code]
  struct Singleton {
    static SingletonData single;
    alias single this;

    private static struct SingletonData {
      @disable void opAssign();
      //methods and data here.
    }
  }
[/code]

Reply via email to