Qt的 signal.trait Sig {
type Data;
type Receiver: Rec;
fn emit(&self, data: Self::Data);
fn conn(&mut self) -> Self::Receiver;
fn disc(&mut self, i: usize);
}
trait Rec {
type Data;
fn on_emit(self, data: Self::Data);
fn get_id(&self) -> usize;
}
macro_rules! def_signal{
// ...
}
// 使用例子
struct MySigData {
num: i32,
}
fn main() {
def_signal!(
MySig, // Signal 名字
MyRec, // Receiver 名字
NySigData, // 预定义的数据类型
|this: MyRec, data: MySigData| { // 逻辑
println!("MySig receriver R{} - num: {}", this.id, data.num);
}
)
let mut ms2 = MySig::new();
let r1 = ms2.conn();
let r2 = ms2.conn();
ms2.emit(MySigData{ num: 3});
ms2.disc(r1.id);
ms2.emit(MySigData{ num: 9});
ms2.disc(r2.id);
}
MySig receriver R1 - num: 3
MySig receriver R2 - num: 3
Removing Signal R1
MySig receriver R2 - num: 9
Removing Signal R2
ECS (entity-component-system) 是一种广泛应用于游戏引擎中的设计理念.ECS 相关的概念中的 Scheduler.bevy_ecs, yaks等.Crust of Rust最新的一期 Rust 视频: Sorting Algorithms.Crust of Rust 是一系列质量比较高的 Rust 直播编码视频. 强烈推荐给各位小伙伴.t-rec 是一个 Rust 编写的超快的命令行录屏器, 可以生成 .gif 图片.
原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。