Конструкторы неоднозначной структуры в D - PullRequest
6 голосов
/ 31 мая 2011

У меня возникли проблемы с пониманием того, как бороться с неоднозначностью конструкторов в D.

struct mydta {
    int a = 2;
    int b = 3;

    this(int c) {
        a = c / 2;
        b = c * 2;
    }
    this(float c) {
        a = cast(int) c / 2;
        b = cast(int) c * 2;
    }

    static mydta afvec = mydta(4.3);
    static mydta aivec = mydta(5);
}
  • afvec имеет значения данных 2 и 8.
  • aivec имеет значения данных 5 и 3.

Это означает, что afvec вызвал this(float c), как и ожидалось из синтаксиса.

Однако aivec выполнил аналогичное назначениена aivec.a = 5.

Я экстраполировал это, чтобы выяснить, что в приведенном выше законно следующее: aivec = mydta(5, 4); дает aivec значения 5 и 4 соответственно.

Есть идеи, какобойти эту неявную инициализацию, чтобы я мог получить доступ к своему конструктору: this(int c)?

1 Ответ

5 голосов
/ 31 мая 2011

Для меня это похоже на ошибку.

Если вы сделаете это:

mydta foo = mydta(5);
writeln(foo.b);

Вы получите 10, как и ожидалось. В версии CTFE было много изменений, поэтому в результате чего-то могло быть что-то сломано. Пожалуйста, опубликуйте сообщение об ошибке в D системе отслеживания проблем .

...