【问题标题】:d2: What are semantics of opDot?d2:opDot 的语义是什么?
【发布时间】:2012-03-26 21:21:33
【问题描述】:

我遇到过几次关于 opDot 方法的提及,该方法允许重载成员访问(也称为点运算符),但缺少它的官方文档。它肯定不会被丢弃,因为 std.typecons.Unique 会使用它。

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

【问题讨论】:

标签: d


【解决方案1】:

opDot 一直是scheduled for deprecation。这就是为什么它没有记录在案。不要使用它。请改用alias this。您可以使用它将特定类型或函数别名为类型,以便它可以像该类型一样工作。例如

struct S
{
    int value;
    alias value this;
}

将使S 类型的变量使用Svalue 字段隐式转换为int。你也可以这样给函数起别名:

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

    alias get this;
}

虽然这可能会受到更多限制,因为 dmd 目前不支持为一个类型设置多个 alias thises(它最终应该是这样)。在这种情况下,您可以将S 隐式转换为int,但不能反过来。尊敬的,alias this 旨在实现隐式转换。

如果alias this 不是您想要的,另一种可能性是opDispatch。它允许您将点右侧的内容转换为其他内容(例如,将对foo 的所有调用转换为bar)。但是,在这两者之间,您应该能够使用opDot 做几乎任何您想做的事情(除此之外还有很多)。

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多