Если я попытаюсь определить рекурсивную структуру / перечисление в Rust:
enum Enum {
A,
B(Enum),
C(Enum, i32),
D(Enum, Enum),
...
}
Я получу ошибку компиляции, как и ожидалось.
Я знаю, что одно из возможных решений этой проблемы заключается в том, чтобы обернуть все рекурсивные ссылки Box<T>
следующим образом:
enum Enum {
A,
B(Box<Enum>),
C(Box<Enum>, i32),
D(Box<Enum>, Box<Enum>),
...
}
или даже предоставить псевдоним type
:
type Enum = Box<InnerEnum>;
enum InnerEnum {
A,
B(Enum),
C(Enum, i32),
D(Enum, Enum),
...
}
Это заставило меня задуматься, возможно ли сделать это автоматически как-нибудь? У меня есть такой макрос?
#[boxed]
enum Enum {
A,
B(Enum),
C(Enum, i32),
D(Enum, Enum),
...
}