Можно ли это сделать? Я не могу найти решение на машине Google или в «книге».
Возможно да, хотя я бы не рекомендовал это.
Начнем с возможного: &Self
будет «ссылкой на слой» с безымянным временем жизни, имя времени жизни - для формы '<symbol>
, поэтому, когда вы пишете &'Self
, вы указываете ссылку времени жизни 'Self
, но никогда не указываете type , поэтому ржавчина c жалуется на «ожидаемый тип».
Если вы добавите «правильное» имя времени жизни и параметризуете структуру, она компилируется нормально:
struct Layer<'sublayers> {
name: String, // Human readable name
id: String, // UUID in the future
order: u8, // int for sorting
width: u8, // Number of nodes
input: [&'sublayers Self], // References to other Layers that feed input into this
}
Однако Я бы не рекомендовал его, поскольку последний член, являющийся срезом, означает, что это DST , с которым трудно работать в лучшем случае - поскольку nomicon особо отмечает, что «пользовательские DST - это в значительной степени недоработанная функция». либо (например, Layer<const Size>
и input: [&Self;Size]
, возможно, на e день), поэтому вам, вероятно, понадобится что-то вроде ссылки на вектор или срез, например
struct Layer<'slice, 'sublayers: 'slice> {
name: String, // Human readable name
id: String, // UUID in the future
order: u8, // int for sorting
width: u8, // Number of nodes
input: &'slice [&'sublayers Self], // References to other Layers that feed input into this
}