On 11/29/2012 07:24 PM, jerro wrote:
On Friday, 30 November 2012 at 02:59:06 UTC, js.mdnq wrote:
I have a struct I am trying convert from int's to the type. Since I
can't add a opCast overload to an int I don't know how to do it. My
opCast convertors in my class do not work for the assignment operator:
class myType
{
opCast, opAssign
}
mytype = 3;
Error that we can't convert an int to myType. While it's very easy to
go from a myType to whatever by writing a cast for it(in the class),
how do I go from an int to myType(in the class)?
For example, I can do
mytype = mytype.opCast(3);
or mytype.opAssign(3);
but these are too verbose to be useful.
Why can't you use opAssign? This works fine:
class A
{
void opAssign(int i)
{
writeln(i);
}
}
auto a = new A();
a = 1; // prints 1
A complete example:
import std.conv;
class C
{
int i;
this(int i)
{
this.i = i;
}
C opAssign(int i)
{
this.i = i;
return this;
}
int opCast(T : int)() const
{
return i;
}
}
void main()
{
auto c = new C(42);
c = 43;
auto i = to!int(c);
assert(i == 43);
}
Ali