On 6/17/22 8:48 AM, harakim wrote:
On Friday, 17 June 2022 at 12:31:45 UTC, harakim wrote:
I can generically convert a string to a type using to!type. I have a read function that does that. I have simplified the example below:

```d
    int readNumber()
    {
        return read!int(val => to!int(val), "number");
    }

    string readTime()
    {
        return read!string(val => toTime(val), "time");
    }

    private T read(T)(T function(string) transform, string typeName)
    {
        string input = readln();
            return transform(input);
    }
```
However, I want to be able to convert my own custom types as well. How do I do that? Is there an operator overload I need to override for that? Do I have to static if on the template type and call the object?

I have no idea why I was stuck on this problem for so long. I can specify anything I want in the transform and I even do in my own example lol. I am still curious if there is a way to make your type work with to!MyCustomType(source)

`to` uses natural hints that it can find via introspection. As others have pointed out, you can define a constructor in the target type to take the source type. To go the other way, you can define an `opCast` in the source type (if that's possible). If you want to convert to string (a specialized case), use a `toString` member function.

For class to class conversion, `to` will try a dynamic cast if none of the above is the case.

I believe there is no specific hook aside from these that allows you to define a conversion path.

-Steve

Reply via email to