在D中覆盖使用定义的T的!T()?

Mar*_*ine 9 d type-conversion

我有结构和类,我希望能够使用该to!T(string)方法以通用方式从字符串轻松创建.但是,我不确定如何"覆盖"该方法以获得此类行为.从我的类型到字符串很容易(我只是定义opCast(string)),但我正在寻找甚至可能吗?

Jon*_*vis 11

如果要将类型转换opCaststring,请不要定义for string.这toString是为了什么.writelnformat等中使用toString,而不是铸造或to,并to会使用toString,所以这绝对是更好地界定toString转换对string.您可以定义opCast为转换为类型的其他string.然后你可以使用铸造或与to.

现在,如果要将a转换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");
}
Run Code Online (Sandbox Code Playgroud)