Type converter from build in to user type

Ali Çehreli acehreli at yahoo.com
Thu Nov 29 19:40:30 PST 2012


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


More information about the Digitalmars-d-learn mailing list