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);
}
```