我正在制作一个多人游戏,服务器完全了解游戏状态(Sure
),但客户端只能看到其中的一部分(SometimesSure
,世界的一部分是隐藏的,例如一副牌中的纸牌)。我想使用相同的GameState
结构体,并使其通用于这两种情况:
enum SometimesSure<T> {
Hidden,
Visibile(T),
}
struct Sure<T>(T);
struct GameState {
pub map_state: MapState,
pub player_states: PlayerStates,
}
其中MapState
和PlayerStates
应位于客户端上:
struct MapState {
pub tiles: Vec<SometimesSure<u8>>,
}
struct PlayerStates {
pub points: SometimesSure<bool>,
pub name: SometimesSure<String>,
}
在服务器上:
struct MapState {
pub tiles: Vec<Sure<u8>>,
}
struct PlayerStates {
pub points: Sure<bool>,
pub name: Sure<String>,
}
如何使用泛型或关联类型来解决这个问题?
1条答案
按热度按时间58wvjzkj1#
理想情况下,你应该使用更高类型的类型,但是Rust不支持这个概念。然而,由于generic associated types(GAT)最近已经稳定,你可以使用一个helper trait(下面代码中的
StateType
)和一个泛型关联类型来实现同样的目的: