我希望能够使用to!T(string)
方法以通用方式轻松地从字符串创建结构和类。但是,我不确定如何“覆盖”该方法以获得此类行为。从我的类型转到字符串很容易(我只想定义opCast(string)
),但我正在寻找甚至可能吗?
答案 0 :(得分:11)
如果您希望自己的类型转换为opCast
,请不要为string
定义string
。这就是toString
的用途。 writeln
和format
等使用toString
,而不是投放或to
,to
将使用toString
,因此定义更好toString
转换为string
。您定义opCast
以转换为其他而不是string
。然后你可以使用铸造或to
。
现在,如果您想将string
转换为您的用户定义类型,那么只需定义相应的构造函数,这将适用于to
。
import std.conv;
struct S
{
int i;
this(string s)
{
i = to!int(s);
}
string toString()
{
return to!string(i);
}
}
void main()
{
auto s = to!S("42");
assert(s.i == 42);
auto t = to!string(s);
assert(t == "42");
}