On Friday, 17 June 2022 at 12:48:56 UTC, 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)

Just add a constructor to your type that takes the value of what you want to convert.

Working example:

```d
struct Foo
{
    int value;

    this(int v)
    {
        value = v;
    }

    this(string v)
    {
        this(to!int(v));
    }
}

void main()
{
    auto foo = to!Foo("123");

    writeln(foo.value);
}
```

Reply via email to