Implicit type conversion depending on assignment

bachmeier no at spam.net
Fri Mar 24 13:55:17 UTC 2023


On Friday, 24 March 2023 at 13:53:02 UTC, bachmeier wrote:
> On Thursday, 23 March 2023 at 13:38:51 UTC, Alexander Zhirov 
> wrote:
>> Is it possible to convert such records inside the structure to 
>> the assigned type?
>>
>> ```d
>> struct MyVal
>> {
>>     string value;
>>     // Here it would be possible to use an alias to this, but 
>> it can only be used 1 time
>> }
>>
>> auto a = MyVal("100");
>> auto b = MyVal("11.2");
>>
>> int MyInt = a;        // Implicitly convert to target type
>> float myFloat = b;    // Implicitly convert to target type
>> ```
>
> You're limited by the use of int and float. It works just fine 
> for structs:
>
> ```
> struct MyInt {
>     int x;
>     alias x this;
>
>     this(MyString s) {
>         x = s.to!int;
>     }
>
>     void opAssign(MyString s) {
>         x = s.to!int;
>     }
> }
>
> struct MyFloat {
>     float x;
>     alias x this;
>
>     this(MyString s) {
>         x = s.to!float;
>     }
>
>     void opAssign(MyString s) {
>         x = s.to!float;
>     }
> }
>
> struct MyString {
>     string s;
>     alias s this;
> }
>
> void main() {
>     auto ms = MyString("100");
>     auto ms2 = MyString("11.2");
>     MyInt mi = ms;
>     MyFloat mf = ms2;
> }
> ```

`opAssign` is not needed for this code to compile, but it would 
be if you had

```
MyInt mi;
mi = ms;
```


More information about the Digitalmars-d-learn mailing list