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