注意:此问题针对的是Rust 1.0版本之前的一个功能,该功能已从语言中删除。
我正在使用实验性功能feature(struct_inherit)
。
我有LocalPlayer
和NetPlayer
结构体,它们都实现了Inputable
特征,并继承了虚拟结构体Player
中的player_num
字段。根据游戏开始的方式,我的程序中的player_2
可以是LocalPlayer
或NetPlayer
。根据不同的情况,Inputable
特征的实现方式也会发生改变。
编译器不允许我根据player_2
是NetPlayer
还是LocalPlayer
来动态分配类型。它报错如下:
error: mismatched types: expected
~player::LocalPlayer
but found~player::NetPlayer
(expected struct player::LocalPlayer but found 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
结构体的实现如下:
pub virtual struct Player {
player_num: uint
}
pub struct LocalPlayer: Player;
pub struct NetPlayer: Player;