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

Reply via email to