d2: Какова семантика opDot? - PullRequest
8 голосов
/ 27 марта 2012

Я встречал несколько упоминаний о методе opDot, который позволяет перегрузить доступ к элементу, иначе оператор точки, но официальной документации по нему нет. Он, конечно, не выпал, так как std.typecons.Unique использует его.

Кто-нибудь знает, как можно использовать opDot и почему нет документации по этому поводу?

1 Ответ

12 голосов
/ 27 марта 2012

opDot было запланировано для устаревания . Вот почему это не задокументировано. Не используйте это. Вместо этого используйте alias this. Вы можете использовать его для псевдонима определенного типа или функции, чтобы он мог действовать как этот тип. например,

struct S
{
    int value;
    alias value this;
}

сделает так, что переменная типа S будет неявно преобразована в int с использованием поля S value. Вы также можете использовать псевдоним функции следующим образом:

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

    alias get this;
}

хотя это может быть более ограничивающим, поскольку dmd в настоящее время не поддерживает наличие нескольких alias this типов для одного типа (хотя в конечном итоге это должно произойти). В этом случае вы можете неявно привести S к int, но не наоборот. Regarldess, alias this предназначен для реализации неявных преобразований.

Если alias this не совсем то, что вам нужно, другая возможность - opDispatch. Это позволяет вам преобразовывать то, что находится на правой стороне точки, в другие вещи (например, превращать все вызовы на foo в bar). Но между этими двумя вы должны быть в состоянии делать практически все, о чем вы думали, с opDot (и многое другое).

...