Определения конфликтов заголовочных файлов

Короткий ответ:

type Board<'a> = &'a [[Tile; 19]; 19];

Rust всегда явно содержит общие аргументы. Жизненные времена также являются общими аргументами. Представьте, что вы были бы родовыми по типу Tile.

type Board = &[[T; 19]; 19];

Это приведет к тому, что ошибка в T не будет существовать (за исключением случаев, когда вы определили фактический тип с именем T). Но вы бы хотели использовать Board для любого внутреннего типа. Итак, что вам нужно сделать, это добавить общий аргумент в определение:

type Board = &[[T; 19]; 19];

Поэтому всякий раз, когда вы используете псевдоним типа Board, вам также необходимо передать тип T.

Вернуться к нашей проблеме с продолжительностью жизни. Наш псевдоним типа имеет ссылку. Мы не знаем, какова продолжительность жизни этой ссылки. Причина, по которой вам редко приходится указывать продолжительность жизни, - lifetime-elision . Это один из случаев, когда вам нужно указать время жизни, так как вы хотите, чтобы время жизни определялось во всех местах, где вы используете Board, как если бы вы использовали &[[Tile; 19]; 19] везде напрямую. В определении псевдонима типа единственное доступное время жизни - 'static, поэтому нам нужно определить новый общий.

0
задан Joel 2 March 2019 в 14:31
поделиться

1 ответ

Вы допустили ошибку при использовании структуры. Невозможно точно сказать, какую ошибку вы допустили, не увидев код, объявляющий структуру и код, который ее использует.

0
ответ дан Daniel 2 March 2019 в 14:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: