std.conv.to

bauss jj_1337 at live.dk
Fri Jun 17 12:53:53 UTC 2022


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


More information about the Digitalmars-d-learn mailing list