我正在使用实验性功能feature(struct_inherit).
我有LocalPlayer和NetPlayer结构,他们都实现了Inputable特征,并player_num从虚拟结构继承了字段Player.根据游戏的开始方式,player_2我的程序可以是LocalPlayer或者NetPlayer.根据具体情况,Inputable实施特征的方式会发生变化.
编译器不会让我动态分配player_2取决于它是否是一个类型NetPlayer或LocalPlayer.它抱怨说:
错误:不匹配的类型:预期
~player::LocalPlayer但找到~player::NetPlayer(预期的struct player :: LocalPlayer但找到struct player :: NetPlayer)
它也不会让我转向NetPlayer或LocalPlayer指向Player指针.它声称它们不具备可扩展性.
有问题的代码示例如下:
let player1 = box player::LocalPlayer::new(0);
let player2;
if local {
player2 = box player::LocalPlayer::new(1);
} else if hosting {
player2 = box player::NetPlayer::new(1);
player2.host();
} else {
player2 = box player::NetPlayer::new(1);
player2.connect();
}
/* ... Omitted Code ... */
let input = player2.get_input(); // Trait function
Run Code Online (Sandbox Code Playgroud)
结构实现如下:
pub virtual struct Player {
player_num: uint
}
pub struct LocalPlayer: Player;
pub struct NetPlayer: Player;
Run Code Online (Sandbox Code Playgroud)
小智 5
Rust中的结构继承非常原始; 你可能不想使用它.在Rust中继承结构之间没有子类型或强制.如果你有很多具有类似字段的结构,这个功能基本上只允许你保存输入(这也是未来可能在将来添加更多功能的未来证明).
你可以做Player,LocalPlayer和NetPlayer特征.然后,您可以获得它们之间所需的子类型行为.或者,你可以做只是LocalPlayer和NetPlayer结构,并让Player是一个特点.你甚至可以拥有一个PlayerImpl你可以从你当前的方式继承的结构(如果你有很多字段要分享),但你需要为两个结构编写独立的impls.