On 09/26/2011 11:15 PM, Timon Gehr wrote:
On 09/26/2011 10:55 PM, Christian Köstlin wrote:
Hi,

I have the problem, that I want to always construct a struct with a
parameter. To make this more comfortable (e.g. provide a default
parameter I have a factory function to create this struct).

struct S {
int i;
this(int i_) { i = i_; }
}

S createS(int i=5) {
return S(i);
}

My question now is:
Is there a way to enfore the creation of the struct with createS?
Or to put it in another way. Is it possible to forbid something like:
S s; or even auto s = S(1);? I read about the this(this) thing, but that
is only used when the struct is copied, as far as I understood.


(My struct has the nature to only work if it is not constructed with the
default struct constructor).

thank in advance

christian

Starting with DMD 2.055, this works.

struct S{
this() @disable;
this(int i_) { i = i_; }
}
mhh ... strange ... i have dmd 2.055 64bit for linux and this compiles without error and outputs
l: 0
c: 0


import std.stdio : writeln;
struct S {
private:
  int[] data;
  @disable this(this);
  @disable this();

  this(size_t s) {
    data = new int[s];
  }
public:
  void p() {
    writeln("l: ", data.length);
    writeln("c: ", data.capacity);
  }
  static S create(size_t  s = 8) {
    return S(s);
  }
}
unittest {
  auto s = S();
  s.p();
}
int main(string[] args) {
  return 0;
}


shouldnt this lead to a compile error?


thanks in advance

christian

Reply via email to