【发布时间】:2011-12-02 02:57:29
【问题描述】:
我希望能够使用to!T(string) 方法以通用方式从字符串轻松创建结构和类。但是,我不确定如何“覆盖”该方法来获得这种行为。从我的类型转到字符串很容易(我只需定义opCast(string)),但我正在寻找的内容是否可能?
【问题讨论】:
标签: type-conversion d
我希望能够使用to!T(string) 方法以通用方式从字符串轻松创建结构和类。但是,我不确定如何“覆盖”该方法来获得这种行为。从我的类型转到字符串很容易(我只需定义opCast(string)),但我正在寻找的内容是否可能?
【问题讨论】:
标签: type-conversion d
如果您希望您的类型转换为string,请不要为string 定义opCast。这就是toString 的用途。 writeln 和format 等使用toString,不强制转换或to,而to 将使用toString,所以定义toString 转换为string 肯定更好。您定义 opCast 以转换为类型 other 而不是 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");
}
【讨论】: