d2:opDot的语义是什么?

tor*_*gen 8 d

我遇到了几个关于opDot方法的提及,它允许重载成员访问又称点运算符,但它的官方文档丢失了.它肯定没有退出,因为std.typecons.Unique使用它.

有谁知道,如何使用opDot,为什么没有关于它的文档?

Jon*_*vis 12

opDot已被安排弃用.这就是没有记录的原因.不要使用它.请alias this改用.您可以使用它将特定类型或函数别名化为类型,以便它可以像该类型一样.例如

struct S
{
    int value;
    alias value this;
}
Run Code Online (Sandbox Code Playgroud)

将使它成为一个类型的变量S将隐式转换为int使用Svalue字段.您也可以使用以下方式对函数进行别名:

struct S
{
    int get()
    {
        return 7;
    }

    alias get this;
}
Run Code Online (Sandbox Code Playgroud)

虽然这可能更具限制性,因为dmd目前不支持alias this为一个类型设置多个es(最终应该).在这种情况下,您可以隐式地转换S为a int,但不能反向转换.Regarldess alias this旨在实现隐式转换.

如果alias this不是你想要的,另一种可能性是opDispatch.它允许您将点右侧的内容转换为其他内容(例如将所有调用转换foobar).但是,在这两者之间,你应该可以做任何你想做的事情opDot(还有更多).