如何进行类型转换和继承Rust结构?

Sur*_*raj 5 struct rust

我正在使用实验性功能feature(struct_inherit).

我有LocalPlayerNetPlayer结构,他们都实现了Inputable特征,并player_num从虚拟结构继承了字段Player.根据游戏的开始方式,player_2我的程序可以是LocalPlayer或者NetPlayer.根据具体情况,Inputable实施特征的方式会发生变化.

编译器不会让我动态分配player_2取决于它是否是一个类型NetPlayerLocalPlayer.它抱怨说:

错误:不匹配的类型:预期~player::LocalPlayer但找到~player::NetPlayer(预期的struct player :: LocalPlayer但找到struct player :: NetPlayer)

它也不会让我转向NetPlayerLocalPlayer指向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,LocalPlayerNetPlayer特征.然后,您可以获得它们之间所需的子类型行为.或者,你可以做只是LocalPlayerNetPlayer结构,并让Player是一个特点.你甚至可以拥有一个PlayerImpl你可以从你当前的方式继承的结构(如果你有很多字段要分享),但你需要为两个结构编写独立的impls.